c#

一,Object Object 做为参数代表任意类型  

如果类没有明确的继承关系  默认继承Object类   
    .object是所有类的基类
    public class MyClass1 :Object{

        public int _id;
    
    }

 Object ob =new Object();

ToString 是Object的方法 所有继承于此类的类的对象都能使用
            ob.ToString();

二,覆盖

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

  public class MyClass3 
    {
    
        public void Test2()
       {
            Console.WriteLine("Test2");

        }
    }

 public class MyClass4: MyClass3
    {
        
        public void Test2()
        {
            //base关键字  代表父类的对象
           base.Test2();
            //代表当前类的对象
           // this.Test2();
            Console.WriteLine("Test4");

        }
    
    }

调用  MyClass4 myClass4 = new MyClass4();
            myClass4.Test2();

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

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

 public class MyClass1 {

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

 public class MyClass2: MyClass1
    {

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

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

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

public void MyClass1Mothod() {

            Console.WriteLine("MyClass1Mothod");

        }
        public void MyClass1Mothod(int a)
        {

            Console.WriteLine("MyClass1Mothod int a");

        }

(相同

    public static void MyClass1Mothod(string a)
        {

        }

)

(3)抽象类    

抽象类    
1.关键字 abstract

//抽象方法
   public abstract void Drink();
   //抽象属性
   public abstract int Bge { get; set; }
2.不能被实例化    不能创建对象
3.抽象类可以包括抽象方法,或者普通方法

 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 class MyClass1:MyClass{
        //实现抽象类drink方法
        public override void Drink() {

            Console.WriteLine("实现抽象类 Drink方法");
        }
        private int _bge;
        //实现抽象类Bge属性
        public override  int Bge { get { return _bge; } set { _bge = value; } }
    }

5.继承抽象类的非抽象类,必须包含全部已继承的抽象方法和访问器的实现
6.通过包含使用  override 修饰符的属性声明,可在派生类中重写抽象类 方法和属性

 public abstract class People { 
        
        public abstract string Name { get; set; }

        public abstract void Eat();
    
    
    }

    public abstract class Man : People
    {

       
        public abstract void Smoke();


    }

    public class Boy : Man{


        public override string Name { get; set; }

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

        }
        public override void Smoke() {

            Console.WriteLine("456");

        }
    }

重载,函数名相同,参数类型或者顺序不同构成重载,与返回类型无关
重写,必然发生在基类和派生类中,其类函数用virtual修饰,派生类用override修饰
覆盖,在子类中写一个和基类一样名字(参数不同也算)的非虚函数,会让基类中的函数被隐藏,编译后会提示要求使用New关键字
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值