我可以从类的实例访问方法吗?例如:
class myClass
{
private static int n = 0;
public static myClass()
{ n = 5;}
public static void Afis()
{
Console.WriteLine(n);
}
}
并在虚空中主要:
static void Main()
{
myClass m = new myClass();
m.Afis();
}
这给了我:cannon be accessed with an instance referece
。是因为我声明函数是静态的吗?如果是这样的话我什么时候应该使用static而不是什么时候因为在c ++中如果我用static声明一些东西它只是初始化一次。这是c#的情况吗?
答案 0 :(得分:3)
您需要使用类名而不是变量名来访问static
方法。
myClass.Afis();
我已经附上了Static Classes and Static Class Members编程指南的链接,因为您已经询问何时应该使用它们而不使用它们。
编程指南中的一点点:
静态类可以用作集合的方便容器 只对输入参数进行操作而不必获取的方法 或设置任何内部实例字段。例如,在.NET中 Framework Class Library,静态System.Math类包含方法 执行数学运算,无需存储 或检索特定数学实例所特有的数据 类。
答案 1 :(得分:1)
是 - 正如您所怀疑的那样 - 您无法通过对象实例访问静态方法,只能通过类型本身访问。
换句话说:
myClass.Afis();
当然 - 反过来也是如此;您无法通过类型访问实例方法。
您可以在this one等其他问题中找到更多关于何时使用static
的信息,但我会说static
限制某些可取的问题,例如可测性和多态性(仅举几例),所以不应该是你的“默认位置”。
答案 2 :(得分:1)
静态方法是通过类本身调用的,而不是类的实例。
static void Main()
{
myClass m = new myClass();
myClass.Afis();
}
答案 3 :(得分:1)
这是对的 - 它是一个静态函数,因此被称为:
myClass.Afis();
答案 4 :(得分:1)
是因为我宣布该函数是静态的吗?
完全。
如果是这样,我何时应该使用静态
猜猜是什么 - 来自错误:当你不需要访问实例变量时。
因为在c ++中如果用静态声明某些东西它只是初始化一次。就是这样的 C#?
如果你的意思是静态构造函数 - 是的。
基本上你所拥有的不是“类”,而是一个无法实例化的静态类。
答案 5 :(得分:1)
静态方法是连接到类广告而不是实例的方法。 如果您希望每个实例都可以使用相同的方法,则使用此方法。 例如,如果我想计算类的实例,则使用静态属性。 要访问静态方法和属性,您必须使用类的名称而不是实例的名称。
答案 6 :(得分:0)
您将方法标记为静态。因此,您必须通过类型访问它。
当方法引用类型并且不使用实例信息时,将使用静态方法。 String.IsNullOrEmpty(string s)
是一种静态方法。它属于字符串类,但不需要实例环境。而每个对象从对象继承的ToString()
方法需要一个实例上下文来定义表示为字符串的内容。