关于C#:代码的不同部分中静态的含义是什么?


What is the meaning of static in differents parts of the code?

我已经学了两个星期的C语言,尽管它不是我的第一语言,也不是第二语言。我一直在想这个静态的词。我知道我早就应该研究这个词了……但这是我第一次意识到这个词对我来说有多混乱。我读到的:

静态类是不需要声明就可以使用的类。(用单一方法类--最佳方法?)这可能在测试、多态性等方面有一些优势和缺点。

但是静态词也可以应用于类、字段、方法、属性、运算符、事件和构造函数!!!!(https://msdn.microsoft.com/en-us/library/98f28cdx%28v=vs.80%29.aspx)。例子:

财产:

1
private static string s  ="";

方法:

1
2
3
public static void helperMethod() {
        Console.WriteLine("Whatever");
    }

"静态"一词是否具有全局意义,或者在代码的不同部分中使用,意思可以改变吗?


class修饰符

当它被应用到staticclass表示属性。

  • 仅包含静态成员。
  • instantiated不能。
  • 是密封的。
  • 不能包含实例构造函数。

改性剂的性能或功能(和事件和方法)

当应用到的特性和功能,例如

1
2
3
4
5
6
7
8
9
public Thing
{
    static int SharedCount { get; set; }

    static string GenerateName()
    {
        // ...
    }
}

它意味着在性能及功能将不可访问,通过类型名称,instantiating的类。这将是不可访问的性质和功能,通过一个实例的类。这两个操作系统。

1
2
var i = Thing.SharedCount;
var s = Thing.GenerateName();

是有效和正确的语句的WHERE子句

1
2
var i = new Thing().SharedCount;
var s = this.GenerateName();

都是不正确的。

代码在功能和性能符合性与static不能访问非静态成员的类。

成员变量

成员变量,以符合static修饰符,如

1
2
3
4
5
6
7
8
9
10
class Thing
{
    private static int sharedCount = 0;
    private static readonly IDictionary<string, int> ThingLookup =
            new Dictionary<string, int>
                    {
                        {"a", 1 },
                        {"b", 2 }
                    };
}

在共享的所有功能和特性和静态的类的所有实例。

static构造函数

当应用到建筑。

1
2
3
4
5
6
7
class Thing
{
    static Thing()
    {
        \\ Do this once and first.
    }
}

该构造函数将static均值每运行一次AppDomain,当访问类型是第一个。在这个特殊的情况下有优势。

算子

当一个运营商是一个摘要是型,这是符合的static永远。

1
2
3
4
public static Thing operator +(Thing left, Thing right)
{
    // Something special to do with things.
}

这是不符合逻辑的话,这是因为运营商必须在一级适用于实例的类型。

这是在这里,distinctions解释,在这里和这里。


静态成员是被认为非常普通的项,在调用成员时不需要创建该类型的实例。虽然任何类都可以定义静态成员,但它们最常见于实用程序类中,如System.Console、System.Math、System.Environment或System.GC等。

另外,C中的静态关键字也指的是类中的某些内容,或类本身,这些内容在类的所有实例中共享。例如,可以通过类名从该类的所有实例访问标记为静态的字段。


有许多相关的静态概念。这将解决你的困惑的答案是静态的。


在简单的话,是不可以改变的静态特性,在你的类,如果类的静态成员是一个多变化的影响,它一次,你的价值,它将改变*在每一个类是受它的人。

静态方法是静态的,如果你有它,往往使用静态上下文(静态或操作系统)。

静态类是一个静态类不能被instantiated },如汽车的汽车将永远拥有这一特性(颜色、大小……)


static关键字的意思在任何地方都是一样的。当它是类的修饰符时,类的成员还必须标记为static。当它是成员(字段、属性、方法、事件等)的修饰符时,可以使用以下语法访问该成员:

1
ClassName.memberName

注意,操作符必须声明为static,扩展方法必须在静态类中,这意味着它也必须是static


在C中,数据成员、成员函数、属性和事件可以声明为静态或非静态。

静态字段和事件只有一个副本,静态方法和属性只能访问静态字段和静态事件。

静态成员通常用于表示响应对象状态而不改变的数据或计算。

静态可以通过以下方式使用:

  • 静态数据成员
  • 静态构造函数
  • 静态属性
  • 静态方法
  • 更多参考:MSDN

    静态的

    C语言中的静态

    什么是静态的?


    快速回答:没有一个static在任何地方都保持相同的上下文:

    从dotnetperls:

    使用类型名调用这些。不需要实例,这会使它们稍微快一点。静态方法可以是公共的或私有的。

    信息:静态方法使用静态关键字,通常在公共之后作为第一关键字或第二关键字。

    警告:静态方法不能访问EDCOX1×6级成员。它没有EDCOX1×7指针。

    实例:实例方法可以访问这些成员,但必须通过实例化对象调用。这增加了间接性。使用实例和静态方法的EDCOX1×8程序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    using System;

    class Program
    {
      static void MethodA()
      {
        Console.WriteLine("Static method");
      }

      void MethodB()
      {
        Console.WriteLine("Instance method");
      }

      static char MethodC()
      {
        Console.WriteLine("Static method");
        return 'C';
      }

      char MethodD()
      {
        Console.WriteLine("Instance method");
        return 'D';
      }

      static void Main()
      {
          //
          // Call the two static methods on the Program type.
          //
          Program.MethodA();
          Console.WriteLine(Program.MethodC());
          //
          // Create a new Program instance and call the two instance methods.
          //
          Program programInstance = new Program();    
          programInstance.MethodB();
          Console.WriteLine(programInstance.MethodD());
        }
     }

    产量

    1
    2
    3
    4
    5
    6
    Static method
    Static method
    C
    Instance method
    Instance method
    D

    static这个词本身就说明了问题。如果你有可能改变每一个新对象的类型-它是instance member,如果它在所有情况下都保持不变-它是static成员。

    来自MSDN:

    It is useful to think of static members as belonging to classes and
    instance members as belonging to objects (instances of classes).

    源:静态成员和实例成员

    静态成员可以通过类对象访问,类似于MyClass.MyMember,当实例成员只能在类(new MyClass()).MyMember的实例上访问时。

    很明显,编译器需要一些时间来创建实例,只有这样您才能访问它的属性。因此实例成员的工作速度比静态成员慢。