第十三章 C# 基础

一.object 

如果类没有明确的继承关系  默认继承object

object 是所有类的基类

调用

 MyClass2 myClass2 = new MyClass2();
            myClass2._id = 1;
            MyClass3 myClass3 = new MyClass3();
            myClass3._id = 2;

            Object ob =new Object();
            //ToString 是Object的方法 所有继承于此类的类的对象都能使用
            ob.ToString();
            int a = 1;
            a.ToString(); 
            char c = 'a';
            c.ToString();
            myClass3.ToString();


            //Object做为参数代表任意类型  
            Test(1);
            Test(myClass3);




           private static void Test(Object ob) {

            Console.WriteLine(ob);
        }

方法

public class MyClass1 :Object{

        public int _id;
    
    }
    public class MyClass2:MyClass1{

        public void MyClass2Mothod() {

            Console.WriteLine("111111111");
        }
    }

    public class MyClass3 : MyClass2
    {
        public void MyClass2Mothod(int a)
        {

            Console.WriteLine("22222222");
        }
    }

二.覆盖

覆盖 在子类中协议歌和基类一样名字(参数名不同也算)的非虚函数

更会让基类中的函数被隐藏 编译后会提示要求使用后new 关键之  使用base

调用

  myClass3.MyClass2Mothod();
            MyClass4 myClass4 = new MyClass4();
            myClass4.Test2();
           

            MyClass5 myClass5 = new MyClass5();

方法

 public class MyClass4: MyClass3
    {
        /*
         *      11.覆盖,在子类中写一个和基类一样名字(参数名不同也算)的非虚函数,
         *      会让基类中的函数被隐藏,编译后会提示要求使用New关键字  使用base 可以调用父类覆盖的方法
         */
        public void Test2()
        {
            //base关键字  代表父类的对象
          //  base.Test2();
            //代表当前类的对象
           // this.Test2();
            Console.WriteLine("Test4");

        }
    
    }
    public class MyClass5 : MyClass3
    {
     
    }

三.多态

含义:

即一个接口多个功能 同-一种操作 作用于不同的对象可以有不同的解释 残生不同地方执行结果体现多态的功能:重写    重载   抽象类   接口

重写  必然发生在基类和派生类中  其类函数用virtual 修饰  派生类用override修饰 

重写的目的  : 父类的方法功能 不能满足于子类需求是

调用

  MyClass2     myClass2 = new MyClass2();
            myClass2.MyClass1Mothod1();

            MyClass3 myClass3 = new MyClass3();
            myClass3.MyClass1Mothod1();

方法

 public class MyClass1 {

        public void MyClass1Mothod() {

            Console.WriteLine("MyClass1Mothod");
        }

        //父类允许子类覆盖叫重写  virtual允许子类覆盖   这种方法叫虚方法
        public virtual void MyClass1Mothod1() 
        {
            Console.WriteLine("MyClass1Mothod1");
        }


    }
    public class MyClass2: MyClass1
    {

        public void MyClass1Mothod()
        {

            Console.WriteLine("MyClass1Mothod覆盖");
        }

        //子类重写父类的方法 使用override 
        public override void MyClass1Mothod1()
        {  

            base.MyClass1Mothod1 ();
            Console.WriteLine("MyClass1Mothod1重写");
        }
    }

    public class MyClass3 :MyClass1{ 
    
    
    
    }

四.重载

重载 函数名相同  参数类型 或者 顺序不同 和 个数有关  与返回值无关

重载  函数名相同  参数类型或者顺序不同构成重载 与返回类型无关

重写 必然发生在基类和派生类中  其类函数用virtual 修饰 派生类用override修饰

覆盖  在子类中写一个和基类一样名字(参数不同也算)的非虚函数 会让基类中的函数被隐藏 编译后会提示要求使用new关键字

调用 

   MyClass1 myClass1 = new MyClass1();
            myClass1.MyClass1Mothod();
            MyClass2 myClass2 = new MyClass2();
            myClass2.MyClass1Mothod();

方法

 public class MyClass1 {

        public void MyClass1Mothod() {

            Console.WriteLine("MyClass1Mothod");

        }
        public void MyClass1Mothod(int a)
        {

            Console.WriteLine("MyClass1Mothod int a");

        }
        public void MyClass1Mothod(int a,int b)
        {

            Console.WriteLine("MyClass1Mothod int a int b");

        }
        public void MyClass1Mothod(int b, string a)
        {

            Console.WriteLine("MyClass1Mothod string a int b");

        }
        public void MyClass1Mothod(int b, int a,int c)
        {

            Console.WriteLine("MyClass1Mothod int a int b int c");

        }
        public void MyClass1Mothod(int b, int a, int c,string d)
        {

            Console.WriteLine("MyClass1Mothod int a int b int c string d");

        }
        public void MyClass1Mothod(int b, int a,string d, int c)
        {

            Console.WriteLine("MyClass1Mothod int a int b string d, int c");

        }


        public static void MyClass1Mothod(string a)
        {



        }
        public int MyClass1Mothod(string a, int b)
        {

            return 1;
        }
    }


   public class MyClass2 :MyClass1{

        public void MyClass1Mothod(string a, int b, bool c)
        {


        }

    }

五 抽象类

1.关键字  abstract
2.不能被实例化    不能创建对象
3.抽象类可以包括抽象方法,或者普通方法

调用

 MyClass1  myClass1 = new MyClass1();
            myClass1.Age = 10;
            myClass1.Eat();
            myClass1.Drink();
            myClass1.Bge = 30;
            Console.WriteLine(myClass1.Bge);

方法

   public abstract class MyClass {

        //普通方法
        public void Eat() {
            Console.WriteLine("吃饱了");
        }
        //普通的属性
        public int Age { get; set; }

        //抽象方法
        public abstract void Drink();
        //抽象属性
        public abstract int Bge { get; set; }


     
    }
4.抽象方法和属性只能被定义 ,在子类中实现
 public abstract class MyClass {

        //普通方法
        public void Eat() {
            Console.WriteLine("吃饱了");
        }
        //普通的属性
        public int Age { get; set; }

        //抽象方法
        public abstract void Drink();
        //抽象属性
        public abstract int Bge { get; set; }


     
    }
5.继承抽象类的非抽象类,必须包含全部已继承的抽象方法和访问器的实现
 public abstract class People { 
        
        public abstract string Name { get; set; }

        public abstract void Eat();
    
    
    }

    public abstract class Man : People
    {

       
        public abstract void Smoke();


    }
6.通过包含使用  override 修饰符的属性声明,可在派生类中重写抽象类 方法和属性
 public class Boy : Man{


        public override string Name { get; set; }

        public override void Eat() {
            Console.WriteLine("123");

        }
        public override void Smoke() {

            Console.WriteLine("456");

        }
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值