<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FC_Sharp%2FClass_Interface%2FIDisposable</id>
		<title>Csharp/C Sharp/Class Interface/IDisposable - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://nfex.ru/index.php?action=history&amp;feed=atom&amp;title=Csharp%2FC_Sharp%2FClass_Interface%2FIDisposable"/>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Class_Interface/IDisposable&amp;action=history"/>
		<updated>2026-04-30T02:53:37Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/C_Sharp/Class_Interface/IDisposable&amp;diff=584&amp;oldid=prev</id>
		<title> в 15:31, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Class_Interface/IDisposable&amp;diff=584&amp;oldid=prev"/>
				<updated>2010-05-26T15:31:18Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:31, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://nfex.ru/index.php?title=Csharp/C_Sharp/Class_Interface/IDisposable&amp;diff=585&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://nfex.ru/index.php?title=Csharp/C_Sharp/Class_Interface/IDisposable&amp;diff=585&amp;oldid=prev"/>
				<updated>2010-05-26T11:39:00Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Derived Disposable Classes==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
public class MyClass : IDisposable&lt;br /&gt;
{&lt;br /&gt;
    protected string name;&lt;br /&gt;
    public MyClass(string name) { this.name = name; }&lt;br /&gt;
    override public string ToString() { return name; }&lt;br /&gt;
    ~MyClass() { Dispose(); Console.WriteLine(&amp;quot;~MyClass()&amp;quot;); }&lt;br /&gt;
    public void Dispose() &lt;br /&gt;
    { &lt;br /&gt;
        Console.WriteLine(&amp;quot;MyClass.Dispose()&amp;quot;); &lt;br /&gt;
        GC.SuppressFinalize(this);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class SonOfMyClass : MyClass, IDisposable&lt;br /&gt;
{&lt;br /&gt;
    public SonOfMyClass(string name) : base(name) { }&lt;br /&gt;
    override public string ToString() { &lt;br /&gt;
       return name; &lt;br /&gt;
    }&lt;br /&gt;
    ~SonOfMyClass() { &lt;br /&gt;
       Dispose(); &lt;br /&gt;
       Console.WriteLine(&amp;quot;~SonOfMyClass()&amp;quot;); &lt;br /&gt;
    }&lt;br /&gt;
    new public void Dispose()&lt;br /&gt;
    { &lt;br /&gt;
        base.Dispose();&lt;br /&gt;
        GC.SuppressFinalize(this);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
   &lt;br /&gt;
class DerivedDisposeApp&lt;br /&gt;
{&lt;br /&gt;
    static void Main(string[] args)&lt;br /&gt;
    {&lt;br /&gt;
        DoSomething();&lt;br /&gt;
    }&lt;br /&gt;
    static void DoSomething()&lt;br /&gt;
    {&lt;br /&gt;
        SonOfMyClass s = new SonOfMyClass(&amp;quot;Bar&amp;quot;);&lt;br /&gt;
        Console.WriteLine(s);&lt;br /&gt;
        s.Dispose();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Protecting Against Double Disposal==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
public class MyClass : IDisposable&lt;br /&gt;
{&lt;br /&gt;
    private string name;&lt;br /&gt;
    public MyClass(string name) { this.name = name; }&lt;br /&gt;
    override public string ToString() { return name; }&lt;br /&gt;
   &lt;br /&gt;
    ~MyClass() &lt;br /&gt;
    { &lt;br /&gt;
        Dispose();&lt;br /&gt;
        Console.WriteLine(&amp;quot;~MyClass()&amp;quot;); &lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    private bool AlreadyDisposed = false;&lt;br /&gt;
   &lt;br /&gt;
    public void Dispose()&lt;br /&gt;
    {&lt;br /&gt;
        if (!AlreadyDisposed)&lt;br /&gt;
        {&lt;br /&gt;
            AlreadyDisposed = true;&lt;br /&gt;
            Console.WriteLine(&amp;quot;Dispose()&amp;quot;);&lt;br /&gt;
            GC.SuppressFinalize(this);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public class MainClass&lt;br /&gt;
{&lt;br /&gt;
    public static void Main(string[] args)&lt;br /&gt;
    {&lt;br /&gt;
        MyClass t = new MyClass(&amp;quot;Foo&amp;quot;);&lt;br /&gt;
        Console.WriteLine(t);&lt;br /&gt;
   &lt;br /&gt;
        t.Dispose();&lt;br /&gt;
        t.Dispose();&lt;br /&gt;
   &lt;br /&gt;
        GC.Collect();&lt;br /&gt;
        GC.WaitForPendingFinalizers();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The constructor initializes the internal object. The Dispose method closes the file resource. The destructor delegates to the Dispose method.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
using System.IO;&lt;br /&gt;
&lt;br /&gt;
public class WriteToFile : IDisposable {&lt;br /&gt;
    public WriteToFile(string _file, string _text) {&lt;br /&gt;
        file = new StreamWriter(_file, true);&lt;br /&gt;
        text = _text;&lt;br /&gt;
    }&lt;br /&gt;
    public void WriteText() {&lt;br /&gt;
        file.WriteLine(text);&lt;br /&gt;
    }&lt;br /&gt;
    public void Dispose() {&lt;br /&gt;
        file.Close();&lt;br /&gt;
    }&lt;br /&gt;
    ~WriteToFile() {&lt;br /&gt;
        Dispose();&lt;br /&gt;
    }&lt;br /&gt;
    private StreamWriter file;&lt;br /&gt;
    private string text;&lt;br /&gt;
}&lt;br /&gt;
public class Writer {&lt;br /&gt;
    public static void Main() {&lt;br /&gt;
        WriteToFile sample = new WriteToFile(&amp;quot;sample.txt&amp;quot;, &amp;quot;My text file&amp;quot;);&lt;br /&gt;
        sample.WriteText();&lt;br /&gt;
        sample.Dispose();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The Dispose Pattern==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
&lt;br /&gt;
public class MyClass {&lt;br /&gt;
    private string name;&lt;br /&gt;
    public MyClass(string name) { this.name = name; }&lt;br /&gt;
    override public string ToString() { return name; }&lt;br /&gt;
    ~MyClass() { Console.WriteLine(&amp;quot;~MyClass()&amp;quot;); }&lt;br /&gt;
    public void Dispose() {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Dispose()&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class GarbageDisposalApp {&lt;br /&gt;
    public static void Main(string[] args) {&lt;br /&gt;
        DoSomething();&lt;br /&gt;
        Console.WriteLine(&amp;quot;end of Main&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    public static void DoSomething() {&lt;br /&gt;
        MyClass t = new MyClass(&amp;quot;Foo&amp;quot;);&lt;br /&gt;
        Console.WriteLine(t);&lt;br /&gt;
        t.Dispose();&lt;br /&gt;
        t = null;&lt;br /&gt;
        GC.Collect();&lt;br /&gt;
        GC.WaitForPendingFinalizers();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==The IDisposable Interface==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
public class MyClass : IDisposable&lt;br /&gt;
{&lt;br /&gt;
    private string name;&lt;br /&gt;
    public MyClass(string name) { this.name = name; }&lt;br /&gt;
    override public string ToString() { return name; }&lt;br /&gt;
   &lt;br /&gt;
    ~MyClass() &lt;br /&gt;
    { &lt;br /&gt;
        Dispose();&lt;br /&gt;
        Console.WriteLine(&amp;quot;~MyClass(): &amp;quot; +name); &lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    public void Dispose()&lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;Dispose(): &amp;quot; +name);&lt;br /&gt;
        GC.SuppressFinalize(this);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public class DisposableApp&lt;br /&gt;
{&lt;br /&gt;
    public static void Main(string[] args)&lt;br /&gt;
    {&lt;br /&gt;
        Console.WriteLine(&amp;quot;start of Main, heap used: {0}&amp;quot;, GC.GetTotalMemory(true));&lt;br /&gt;
        DoSomething();&lt;br /&gt;
        Console.WriteLine(&amp;quot;end of Main, heap used: {0}&amp;quot;, GC.GetTotalMemory(true));&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    public static void DoSomething()&lt;br /&gt;
    {&lt;br /&gt;
        MyClass[] ta = new MyClass[3];&lt;br /&gt;
   &lt;br /&gt;
        for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
        {&lt;br /&gt;
            ta[i] = new MyClass(String.Format(&amp;quot;object #&amp;quot; +i));&lt;br /&gt;
            Console.WriteLine(&amp;quot;Allocated {0} objects, heap used: {1}&amp;quot;, i+1, GC.GetTotalMemory(true));&lt;br /&gt;
        }&lt;br /&gt;
   &lt;br /&gt;
        for (int i = 0; i &amp;lt; 3; i++)&lt;br /&gt;
        {&lt;br /&gt;
            ta[i].Dispose();&lt;br /&gt;
            ta[i] = null;&lt;br /&gt;
            GC.Collect();&lt;br /&gt;
            GC.WaitForPendingFinalizers();&lt;br /&gt;
            Console.WriteLine(&amp;quot;Disposed {0} objects, heap used: {1}&amp;quot;,i+1, GC.GetTotalMemory(true));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==using statement with IDisposable interface==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;source lang=&amp;quot;csharp&amp;quot;&amp;gt; &lt;br /&gt;
using System;&lt;br /&gt;
public class MyValueReport {&lt;br /&gt;
    int InstanceNumber;&lt;br /&gt;
    public MyValueReport(int InstanceNumber) {&lt;br /&gt;
        this.InstanceNumber = InstanceNumber;&lt;br /&gt;
        Console.WriteLine(InstanceNumber);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class MyValue : IDisposable {&lt;br /&gt;
    int n;&lt;br /&gt;
    public MyValue(int n) {&lt;br /&gt;
        this.n = n;&lt;br /&gt;
        MyValueReport MyReport = new MyValueReport(n);&lt;br /&gt;
    }&lt;br /&gt;
    public void Dispose() {&lt;br /&gt;
        MyValueReport MyReport = new MyValueReport(this.n);&lt;br /&gt;
        GC.SuppressFinalize(this); &lt;br /&gt;
    }&lt;br /&gt;
    ~MyValue() {&lt;br /&gt;
        MyValueReport MyReport = new MyValueReport(this.n);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
public class Test {&lt;br /&gt;
    static void Main() {&lt;br /&gt;
        MyValue d1 = new MyValue(1);&lt;br /&gt;
        MyValue d2 = new MyValue(2);&lt;br /&gt;
        MyValue d3 = new MyValue(3);&lt;br /&gt;
        d1 = null;&lt;br /&gt;
        using (d3) {&lt;br /&gt;
            MyValue d4 = new MyValue(4);&lt;br /&gt;
        }&lt;br /&gt;
        d2.Dispose();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>