我已经学习了两个星期的C#,虽然这不是我的第一语言.我一直在想静态词.我知道我早就应该研究过这个词了......但这是我第一次意识到这个词对我来说有多么混乱.我读过的内容:
静态类是一个不需要实例化的类( 使用单一方法的类 - 最佳方法?).这可能有一些优点和一些关于测试,多态性等的不利因素.
但是静态词也可以应用于类,字段,方法,属性,运算符,事件和构造函数!(https://msdn.microsoft.com/en-us/library/98f28cdx%28v=vs.80%29.aspx).例:
属性:
private static string s = "";
Run Code Online (Sandbox Code Playgroud)
方法:
public static void helperMethod() {
Console.WriteLine("Whatever");
}
Run Code Online (Sandbox Code Playgroud)
static这个词是否具有全局意义,或者在代码的不同部分使用,意义可以改变吗?
class 修改
何时static应用于class它表示四个属性.
属性或函数修饰符(以及事件和方法)
当应用于属性和功能时,例如
public Thing
{
static int SharedCount { get; set; }
static string GenerateName()
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着可以通过类型名称访问属性和函数,而无需实例化类.无法通过类的实例访问此属性和函数.所以,两者
var i = Thing.SharedCount;
var s = Thing.GenerateName();
Run Code Online (Sandbox Code Playgroud)
是有效和正确的陈述,在哪里
var i = new Thing().SharedCount;
var s = this.GenerateName();
Run Code Online (Sandbox Code Playgroud)
都不正确.
使用static修饰符声明的函数和属性中的代码无法访问类的非静态成员.
成员变量
使用static修饰符声明的成员变量,例如
class Thing
{
private static int sharedCount = 0;
private static readonly IDictionary<string, int> ThingLookup =
new Dictionary<string, int>
{
{ "a", 1 },
{ "b", 2 }
};
}
Run Code Online (Sandbox Code Playgroud)
被共享由所有的静态功能和性能并且由该类的所有实例.
static 建设者
当应用于构造函数时,例如
class Thing
{
static Thing()
{
\\ Do this once and first.
}
}
Run Code Online (Sandbox Code Playgroud)
static表示构造函数将在AppDomain首次访问类型时运行一次.围绕这个有特殊的边缘情况.
运营商
当一个操作符为一个类型重载时,这总是被声明为static,例如
public static Thing operator +(Thing left, Thing right)
{
// Something special to do with things.
}
Run Code Online (Sandbox Code Playgroud)
由于运算符必须应用于类型,因此在实例级别声明它是不合逻辑的.
| 归档时间: |
|
| 查看次数: |
779 次 |
| 最近记录: |