尝试学习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();
}
}
答案 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并详细了解静态方法和非静态方法之间的区别,那就很好了。