标签:
C#中的类和类成员都是默认为非静态,只有加上"static"关键字的才是非静态
两者用起来其实都非常简单.虽然调用方式不同,但其最终的机制都是一样的.
主要区别在于非静态依靠对象来调用,静态利用类来调用,即静态属于整个类,并不属于某一实例.
静态内部只能调用已经确定的变量,即静态内部只能调用静态和已经实例化之后的成员.
非静态就所有都可以调用
具体看下面的代码
/// <summary> /// 非静态类 在这儿我们把它所有成员都定以为非静态 /// </summary> class unStaticClass { //非静态属性 public string Name { set; get; } //非静态方法 public void SayHello() { Console.WriteLine(" hello "+Name); } //可以看出这是正确的,没有错误。 } /// <summary> /// 再定义一个非静态类 我们定义它的成员时既有非静态,又有静态 /// </summary> class unStaticClassDemo { //非静态属性 public string Name { set; get; } //静态属性 public static string name { set; get; } //非静态方法 public void SayHello() { Console.WriteLine("Hello "+Name);//肯定正确 Console.WriteLine("Hello"+name);//正确,非静态当中可以调用静态////// } //静态方法 注意了 静态内部只能调用用静态和已经实例化的成员 public static void SayHi() { // Console.WriteLine("Hello "+Name);//这步报错 因为静态的内部不能调用非静态 Console.WriteLine("Hi "+name);//正确 静态内部可以调用静态。 //但是可以这样间接来调用非静态 unStaticClassDemo uscd=new unStaticClassDemo(); uscd.Name = "小吴"; Console.WriteLine("Hi " + uscd.Name);//正确 静态内部可以调用已经实例化的成员 } } /// <summary> /// 最后定义一个非静态类 其所有成员必须全部为静态 /// </summary> static class StaticClass { private static int Age; public static string name { set; get; } public static int Number { set; get; } public static void SayHi() { } }
class Program { static void Main(string[] args) { //下面我们来调用上面写好的类 //实例化unStaticClass unStaticClass usc=new unStaticClass(); usc.Name = "小明"; usc.SayHello(); //从上面可以看出非静态是依靠对象来进行调用 //实例化unStaticClassDemo unStaticClassDemo uscd=new unStaticClassDemo(); uscd.Name = "小明"; // uscd.name="111" 这儿出错,静态不能利用对象来调用 // 静态利用类来调用,见下面一步 unStaticClassDemo.name = "小红"; uscd.SayHello(); //静态方法也如此 unStaticClassDemo.SayHi(); //StaticClass s = new StaticClass(); //静态类更是不能被实例化。 Console.ReadKey(); } }
牢记最核心那几句话,就可以完全掌握静态和非静态.两者其实并未差别,只是用法不同.
标签:
原文地址:http://www.cnblogs.com/Huaran1chendu/p/4797934.html