【问题标题】:Call function of unnamed object in using statement在 using 语句中调用未命名对象的函数
【发布时间】:2019-03-31 23:01:53
【问题描述】:
尝试学习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();
}
}
【问题讨论】:
标签:
c#
.net
using-statement
【解决方案1】:
因为add不是static,你需要创建一个AnswerCmd的新实例来访问它,像这样:
using (var instance = new AnswerCmd())
{
instance.add(5);
}
【解决方案2】:
因为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时会报错。
【解决方案3】:
您的代码几乎没问题,但如果您对代码进行更多更改,您就可以做您想做的事。这是您的代码,稍作改动:
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()。
如果您想了解更多关于此以及为什么要这样做的信息,我不得不说这是因为您的 tst 方法是 static 而您的 add 方法是 non -静态。非静态方法仅适用于您的类的对象,当您没有从该类创建对象时,您不能调用它们。当您直接调用非静态方法而不创建对象时,这是一个语法错误。
您还必须在Dispose 方法中删除或注释throw new NotImplementedException();,因为当您离开使用时,您的方法将抛出和Exception。
如果您访问 this link 并详细了解静态和非静态方法之间的区别,这很好。