在using语句中调用未命名对象的功能

时间:2018-10-27 11:18:36

标签: c# .net using-statement

尝试学习using语句。如何在add函数中调用新创建的未命名对象的tst()函数:

public class AnswerCmd : IDisposable
{

    public static void tst()
    {
        using (new AnswerCmd())
        {
            //add(5); not works
        }

    }



    public void add(int value)
    {
        //....
    }

    public void Dispose()
    {
        throw new NotImplementedException();
    }

}

3 个答案:

答案 0 :(得分:4)

由于add不是static,因此您需要创建一个AnswerCmd的新实例来访问它,如下所示:

using (var instance = new AnswerCmd())
{
    instance.add(5);
}

答案 1 :(得分:0)

因为tst函数是静态函数,但add函数却不是。

如果要创建实例,请尝试删除static

public class AnswerCmd : IDisposable
{

    public void add(int value)
    {

    }

    public void Dispose()
    {

    }

}

然后您就可以在室外这样使用

using (var ans = new AnswerCmd())
{
    ans.add(5);
}

注意

throw new NotImplementedException();函数中删除Dispose,否则,离开using时会收到错误消息。

答案 2 :(得分:0)

您的代码几乎可以,但是如果您更改代码多一点,就可以做您想做的事情。这是您的代码,稍有更改:

public class AnswerCmd : IDisposable
{
    public static void tst()
    {
        using (AnswerCmd var = new AnswerCmd())
        {
            var.add(5);
        }
    }

    public void add(int value)
    {
        Console.WriteLine($"Add: {value}");
    }

    public void Dispose()
    {
        //throw new NotImplementedException();
    }
}

您必须以类的类型在using语句中声明变量AnswerCmd var,然后在像这样AnswerCmd var = new AnswerCmd()创建并赋值和对象后,像这样add来调用var.add()方法{1}}。

如果您想了解更多信息以及为什么要这样做,那是因为您的tst方法是 static 而您的add方法是非静态。非静态方法仅适用于您的类的对象,如果您未从该类中创建对象,则无法调用它们。当您直接调用非静态方法而不创建对象时,这是一种语法错误。

您还必须在throw new NotImplementedException();方法中删除或Dispose,因为当您离开使用方法时,您的方法将抛出Exception

如果您访问this link并详细了解静态方法和非静态方法之间的区别,那就很好了。