C#类:通过实例访问方法

时间:2012-02-08 08:58:33

标签: c# static

我可以从类的实例访问方法吗?例如:

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#的情况吗?

7 个答案:

答案 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()方法需要一个实例上下文来定义表示为字符串的内容。