using
System;
namespace
GFG {
/// <summary>
/// A File class which acts
/// as an unmanaged data
/// </summary>
public
class
File {
public
string
Name
{
get
;
set
;
}
public
File(
string
name) {
this
.Name = name; }
}
/// <summary>
/// File Handler class which
/// implements IDisposable
/// interface
/// </summary>
public
class
FileHandler : IDisposable {
private
File fileObject =
null
;
private
static
int
TotalFiles = 0;
private
bool
disposedValue;
public
FileHandler(
string
fileName)
{
if
(fileObject ==
null
) {
TotalFiles++;
fileObject =
new
File(fileName);
}
}
protected
virtual
void
Dispose(
bool
disposing)
{
if
(!disposedValue) {
if
(disposing) {
TotalFiles = 0;
}
Console.WriteLine(
"The {0} has been disposed"
,
fileObject.Name);
fileObject =
null
;
disposedValue =
true
;
}
}
public
void
Dispose()
{
Dispose(disposing :
true
);
GC.SuppressFinalize(
this
);
}
public
void
GetFileDetails()
{
Console.WriteLine(
"{0} file has been successfully created."
,
fileObject.Name);
}
~FileHandler() { Dispose(disposing :
false
); }
}
class
Program {
static
void
Main(
string
[] args)
{
Console.WriteLine(
"Explicit calling of dispose method - "
);
Console.WriteLine(
""
);
FileHandler filehandler =
new
FileHandler(
"GFG-1"
);
filehandler.GetFileDetails();
filehandler.Dispose();
Console.WriteLine(
""
);
Console.WriteLine(
""
);
Console.WriteLine(
"Implicit calling using 'Using' keyword - "
);
Console.WriteLine(
""
);
using
(FileHandler fileHandler2
=
new
FileHandler(
"GFG-2"
))
{
fileHandler2.GetFileDetails();
}
}
}
}