using语句中未命名对象的调用函数

Call function of unnamed object in using statement

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

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();
    }

}

因为add不是static,你需要创建一个新的AnswerCmd实例来访问它,像这样:

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

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

如果你想创建一个实例尝试移除static

public class AnswerCmd : IDisposable
{

    public void add(int value)
    {

    }

    public void Dispose()
    {

    }

}

那你就可以在外面这样用了

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

备注

删除 Dispose 函数中的 throw new NotImplementedException(); 否则,当您离开 using.

时会出现错误

您的代码几乎没问题,但如果您稍微更改一下代码,您就可以做您想做的事。这是您的代码,稍作改动:

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 语句中以您的 class 类型声明一个变量 AnswerCmd var,然后在创建和分配并反对它之后像这样 AnswerCmd var = new AnswerCmd() 调用您的 add 这样的方法 var.add()

如果您想了解更多相关信息以及为什么要这样做,我不得不说这是因为您的 tst 方法是 static 而您的 add 方法是 非静态 。非静态方法仅适用于 class 的对象,如果您没有从 class 创建对象,则无法调用它们。当您在不创建对象的情况下直接调用非静态方法时,这是一个语法错误。

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

如果您访问 this link 并阅读有关静态方法和非静态方法之间差异的更多信息,这很好。