帮我讲解C#中的Destructors? [英] Help me about Destructors in C#?

查看:89
本文介绍了帮我讲解C#中的Destructors?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨大家好!

当我在C#中声明一些代码时:

  public   class  MyClass 
{
public MyClass()
{
}

// 析构函数
~ MyClass()
{
Console.WriteLine( Object destroied);
}

}

public static void main( string [] arg)
{
MyClass class_A = new MyClass();
DoWork();
}

public static void DoWork()
{
MyClass class_B = new MyClass();
}





////////////////////// ///////////////



为什么class_B对象耗尽DoWork功能!我没有碰到它的~MyClass()。

当主要表演结束时。两个对象class_A和class_B进入~MyClass();



任何人都可以为我解释!!感谢您的时间...





添加了代码块,添加了缩进并修正了语法错误 - OriginalGriff [/ edit]

解决方案

基本上,我怀疑问题是您的代码没有运行!

我将您的代码复制到控制台应用程序中试了一下:

  class 程序
{
public static void Main( string [] arg)
{
MyClass class_A = new MyClass();
DoWork();
}

public static void DoWork()
{
Console.WriteLine( In做工作);
MyClass class_B = new MyClass();
}
}
public class MyClass
{
public MyClass()
{
}

// 析构函数
~MyClass()
{
Console.WriteLine( Object destroied);
}

}

果然,使用调试器我可以看到析构函数方法确实被调用了两次。



你真的称你的方法为主吗?或者您使用主要? C#区分大小写,因此前者不会自动运行。


对象分配和处理在托管代码中有很大不同。这就是垃圾收集机制破坏了对象,这种机制并不总是像你预期的那样可以预测。在这种情况下,只在代码完成后调用析构函数。请参阅 [ ^ ]了解更多详情。

Hi Guys!
When I declared some code in C#:

public class MyClass
    {
    public MyClass()
        {
        }

    //Destructor
    ~MyClass()
        {
        Console.WriteLine("Object destroied");
        }

    }

public static void main(string[] arg)
    {
    MyClass class_A = new MyClass();
    DoWork();
    }

public static void DoWork()
    {
    MyClass class_B = new MyClass();
    }



/////////////////////////////////////

Why "class_B" object run out DoWork function! I don''t run into its ~MyClass().
When main performed finish. two objects "class_A" and "class_B" run into ~MyClass();

Can anyone explain for me!! Thanks for your time...


[edit]Code block added, indentation added and syntax errors corrected - OriginalGriff[/edit]

解决方案

Basically, I suspect the problem is that your code isn''t running!
I copied your code into a console app and tried it:

class Program
    {
    public static void Main(string[] arg)
        {
        MyClass class_A = new MyClass();
        DoWork();
        }

    public static void DoWork()
        {
        Console.WriteLine("In Do work");
        MyClass class_B = new MyClass();
        }
    }
public class MyClass
    {
    public MyClass()
        {
        }

    //Destructor
    ~MyClass()
        {
        Console.WriteLine("Object destroied");
        }

    }

And sure enough, using the debugger I could see that the destructor method was indeed called twice.

Did you really call your method "main"? Or did you use "Main"? C# is case sensitive, so the former would not be run automatically.


Object allocation and disposals are much different in managed code. That is objects are destroyed by garbage collection mechanism that is not always predictable as you expected. In this case destructors are only called after code has finished. Please refer to [^] for more details.


这篇关于帮我讲解C#中的Destructors?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆