码迷,mamicode.com
首页 > Windows程序 > 详细

C#中的静态和非静态

时间:2015-09-10 15:40:25      阅读:253      评论:0      收藏:0      [点我收藏+]

标签:

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();
        }
    }

 

 

牢记最核心那几句话,就可以完全掌握静态和非静态.两者其实并未差别,只是用法不同.

C#中的静态和非静态

标签:

原文地址:http://www.cnblogs.com/Huaran1chendu/p/4797934.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!