.NET基础加强-3-变量|封装继承多态|抽象类|静态类和静态成员

 

      /// <summary>

        /// 如果多个button使用同一个click事件
        /// 可以通过sender来确定当前事件对应的是哪个button的触发的
        /// </summary>
        /// <param name="sender">触发这个事件的控件</param>
        /// <param name="e">事件的相关信息</param>
        private void button1_Click(object sender, EventArgs e)
        {
            Button btn = sender as Button;

        }


导入命名空间的快捷键

Ctrl+.   或者Shift+Alt+F10


成员变量和局部变量

        /// <summary>
        /// 在类中直接声明的变量叫做类的成员变量
        /// 类的成员变量在声明之后会有默认值,所以在声明之后可以不赋值
        /// </summary>
        static int num;

        static int age = 100;

        static void Main(string[] args)
        {

            Console.WriteLine(num);
            num++;
            Console.WriteLine(num);


            //在方法中声明的变量叫做局部变量
            //局部变量必须在声明之后赋值,否则会报错,提示使用了未赋值的局部变量
            int m = 0;
            //int m;
            m++;
            Console.WriteLine(m);


            //类的成员变量和方法的局部变量是可以同名的
            //而且谁离得近优先使用谁,所以这里输出为1000
            //这主要是应为类的成员变量和局部变量存储的位置不同
            int age = 1000;
            Console.WriteLine(age);


            Console.ReadKey();

        }


封装:主要就是为了方便

比如电视遥控器,随着电视升级,遥控器也跟着升级

遥控的距离增加,更精准,更灵活,但是他们的主要按键还是一样的

内部的操作原理被封装了起来,我们不用知道他的运作过程也可以使用


继承:主要就是为了代码的重复使用

比如男人和女人继承自人,我们可以说男人是人,这是正确的

如果说学生继承自三好学生,我们不能说所有的学生都是三好学生,所以这个继承是错误的


多态:

抽象类:

抽象类类中可以有实例成员,也可以有抽象成员

抽象成员只能包含在抽象类中

抽象成员不能有任何实现(不能有方法体,空的方法体也不行)

抽象类不能被实例化,抽象类的目的就是用来被继承,继承的主要目的就是为了实现多态

抽象成员被继承之后必须要被override重写,除非子类也是一个抽象类


ps:是使用虚方法还是抽象类,主要看这个类需不需要有默认实现,还有就是这个类要不要被实例化类决定

如果需要有默认实现,或者需要被实例化则使用虚方法,否则使用抽象类

 /// <summary>
    /// 抽象类
    /// </summary>
    public abstract class Person
    {
        /// <summary>
        /// 抽象类里面可以有实例成员也可以有抽象成员
        /// </summary>
        public string Name
        {
            get;
            set;
        }

        /// <summary>
        /// 抽象成员只能存在抽象类中
        /// 抽象成员不能有任何实现,连空实现也不行
        /// 抽象类不能被实例化,抽象类存在的意义就是被继承,而继承是为了实现多态
        /// 子类在继承抽象类的时候,所有的抽象成员必须被重写
        /// </summary>
        public abstract void SayHi();

        public abstract void Eat();
    }


    public class Student : Person
    {

        public override void SayHi()
        {
            Console.WriteLine("大家好,我是一名学生呵呵呵呵。。。。");
        }

        public override void Eat()
        {
            Console.WriteLine("你个吃货 思密达");
        }
    }


    public class Test
    {
        public void te()
        {
            //把子类存储到父类中,然后去调用子类重写的方法,才是抽象类的意义所在
            //如果直接实例化子类Student s = new Student();,然后在对子类进行操作,就失去了抽象类的意义
            Person p = new Student();
            p.SayHi();
            p.Eat();
        }
    }


实例类中的静态成员

    public class Class2
    {

        private string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }


        /// <summary>
        /// 如果在一个实例类里面有一个静态类,并且为这个静态类赋值一个初始值
        /// 则在编译之后这个类里面会有两个构造函数
        /// 一个静态构造函数,用来初始化Age=19
        /// 如果没有赋值,则不会有这个静态构造函数,而只有一个实例静态函数
        /// </summary>
        public static int Age = 19;
    }


静态类

public static class Class3

    {
        /// <summary>
        /// 静态类中也可以写静态构造函数
        /// 但是静态构造函数不能有修饰符
        /// 而且静态构造函数默认的访问修饰符为Private,以此来保证他不能被实例化
        /// </summary>
        static Class3()
        {
        
        }


        public static string Name;

        public static void SayHi()
        {

        }

        /// <summary>
        /// 静态类中不能添加实例对象
        /// 静态类中只能有静态成员
        /// </summary>
        //public string Name;

    }











猜你喜欢

转载自blog.csdn.net/m0_37532448/article/details/80772397