菜鸟教程C#总结笔记

China☆狼群 提交于 2019-12-14 08:57:40

前言

把菜鸟教程C#部分的知识点记录下来,以供日后复习。
菜鸟教程

可空类型

总结:
声明类型后面加?可以让不能为空的值为空。
??和?.使用方法看代码示例。

可空类型

示例代码:

            int? a;
            a = null;

			b = a??1;//如果a为空则返回1
			
			//如果testClass为空则不会调用DoSomething方法
			//省掉了判断testClass是否为空的步骤
			testClass?.DoSomething();

继承

总结:
C#不支持多重继承,但是可以继承多个接口。
实例只能向上兼容(子实父)。
派生类必须继承父类的构造函数,默认继承的无参构造函数。派生类继承构造函数时需要传入父类构造函数所需的参数,具体看代码示例。

继承

示例代码:

    class Father
    {
        public Father(int a)
        {
            Console.WriteLine("Father:{0}",a);
        }
        public virtual void DoFather()
        {
            Console.WriteLine("Father");
        }
    }
    
    class Son:Father
    {
        public Son(int a) : base(a)
        {
            Console.WriteLine("Son:{0}", a);
        }

        public override void DoFather()
        {
            Console.WriteLine("Son");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Father father = new Father(1);
            father.DoFather();

            Son son = new Son(1);
            son.DoFather();

            //Error 子类无法用父类实例
            //Son sf = new Father() as Son;
            //sf.DoFather();

            Father fs = new Son(1);
            fs.DoFather();

            Console.ReadKey();
        }
    }

多态

总结:
abstract类中可以包含抽象字段,抽象方法。也可以包含实现了的方法和字段(非abstract)。
abstract和virtual的区别:abstract是抽象,只需要声明不需要实现部分,它必须被覆写。virtual是虚方法。必须有实现部分(即使是空的大括号),可以不被覆写。
new和override的区别:new是隐藏方法,根据声明的class调用方法,如果声明是父类,即使是用子类实例的,也调用的父类。override是重写方法,看用的哪个类实例调用哪个类。
方法重载(overload)有三个条件,方法名必须相同,参数列表必须不相同,返回值类型可以不相同。(二必须一可以)

多态

运算符重载

总结:
1.是静态方法,是重载不是覆写。
2.注意需要的参数和返回值。
3.使用operator关键字,后面跟上要重载的操作符。
4.不是所有操作符都可以重载,详细内容看教程。

运算符重载

示例代码:

    public class Program
    {
        static void Main(string[] args)
        {
            OperatorTest a = new OperatorTest();
            a.num = 5;
            OperatorTest b = new OperatorTest();
            b.num = 6;
            OperatorTest c = a + b;
            Console.WriteLine(c.num);
            Console.ReadKey();
        }
    }

    public class OperatorTest
    {
        public int num;
        
        //运算符重载
        public static OperatorTest operator +(OperatorTest a, OperatorTest b)
        {
            OperatorTest test = new OperatorTest();
            test.num = a.num + b.num;
            return test;
        }
    }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!