C#三大特性

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*
 * C#三大特性
 * 封装:
 * 就是吧一个对象所能操作的所有信息放在一起;这样的方法包含在类中,通过类的实例来实现;
 * 作用:
 * 1.良好的封装能够减少耦合(比如实现界面和逻辑分离);
 * 2.可以让类对外接口不变,内部可以实现自由的修改;
 * 3.类具有清晰的对外接口,使用者只需要调用,无需关心内部;
 * 4.因为封装的类功能相对独立,因此能更好的实现代码复用;
 * 5.可保护代码不被无意中破坏,通过私有字段等实现内部,注意:这里的代码保护不是指代码本身的加密,而是对不想外部更改的代码通过私有实现;
 * 继承:
 * 在现有类(基类、父类)上建立新类(派生类、子类)的处理过程为继承;从父辈身上继承点特征;
 * 被继承的类为基类(父类),继承的类为派生类(子类),派生类能自动获取基类(除了构造函数和析构函数和(私有成员)的所有成员),可以在派生类中添加新的属性和方法扩展其功能;
 * 作用:
 * 如果子类属性和父类有一些不一样,那么就不用再费劲见一个新类,可以直接在父类基础上修改就行了,免去了很多操作,不用重复定义类;
 * 语法:
 * 子类:父类
 * 一个子类只能有一个父类(只能继承一个类)
 * protected 修饰符(受保护的,只有当前类的成员与继承该类的类 才能访问)
 * 多态:
 * 同一操作作用于不同的对象可以有不同的解释,产生不同的执行效果;
 * 多态的表达方式:
 * 1.使用新的派生成员替换基成员:
 * 如果基类定义了一个方法、字段或属性,则new关键字用于在派生类中创建该方法、字段或属性的新定义;new关键字放置在要替换的类成员的返回类型之前,调用的是新的类成员而不是已被替换的基类成员,这些基类成员成为隐藏成员;如果将派生类的实例强制转换成基类的实例,就仍然可以调用隐藏类成员;
 * 2.虚拟的基成员:
 * 重写:父类中的方法,属性用virtual修饰;子类中对应override修饰
 * 注意:
 *     1.字段不能是虚拟的,只有方法、属性、事件和索引器才可以是虚拟的;
 *     2.子类重写某个虚拟成员时,即使该子类的实例被当作基类的实例访问,也会调用子类的成员;
 *     3.无论在子类和最初声明虚拟成员的类之间已声明了多少个类,虚拟成员都将永远为虚拟成员;如果类A声明了一个虚拟成员,类B从A派生,类C从类B派生,则类C继承该虚拟成员,并且可以选择重写它,而不管类B是否为该成员声明了重写;
 *     4.派生类可以通过将重写声明为密封的来停止虚拟继承,这需要在类成员声明中将sealed关键字方法override关键字的前面;
 * 3.base:可以调用父类的成员方法,除了构造函数和析构函数,派生类将隐式继承了直接基类的所有成员,也可以显示得而调用父类的构造函数来构造子类的成员数据(引申this)
 * 
*/
namespace ConsoleApplication8
{
    class Program
    {
        static void Main(string[] args)
        {
            #region
            //BlackCat blackCat = new BlackCat();
            //blackCat.Run();
            //Console.WriteLine(blackCat.Size);
            //Console.WriteLine(blackCat.name);
            #endregion
            #region
            //Mosquito mosquito = new Mosquito();
            //Console.WriteLine("蚊子大小=" + mosquito.Size());
            //Insect insect = new Insect();
            //Console.WriteLine("昆虫大小=" + insect.size);
            #endregion
            Insect insect = new Mosquito();//父类调用子类的
            insect.Bite();
            Console.WriteLine("昆虫大小=" + insect.size);
            Insect insect1 = new Ant();
            insect1.Bite();
            Console.ReadKey();
        }
    }
    #region
    //class Monitor//简单的封装
    //{
    //    private string brand;//品牌
    //    public string Brand
    //    {
    //        get { return brand; }
    //    }
    //    public string color;//颜色
    //    private int size;//尺寸
    //    public int Size
    //    {
    //        get { return size; }
    //    }
    //    void Show()//显示
    //    { 
    //    }
    //}
    #endregion
    #region
    //猫类
    class Cat
    {
        public Cat()
        {
            Console.WriteLine("我是猫");
        }
        public Cat(int age)//有参的不能被读取
        {
            Console.WriteLine("我是猫,我今年{0}岁");
        }
        ~Cat()
        { 
        
        }
        public string name = "Tom";
        private int size = 10;
        public int Size
        {
            get { return size; }
        }
        public void Run()
        {
            Console.WriteLine("我在跑");
        }
    }
    //黑猫类
    class BlackCat : Cat//继承语法 子类:父类
    {
        public BlackCat()
        {
            Console.WriteLine("我是黑猫");
        }
    }
    #endregion
    #region
    昆虫类
    //class Insect
    //{
    //    public int size = 10;
    //    public void Bite()
    //    { 
        
    //    }
    //}
    蚊子类
    //class Mosquito : Insect
    //{
    //    public new int size = 20;
    //    public int Size()
    //    {
    //        return size;
    //    }
    //}
    蚂蚁类
    //class Ant : Insect
    //{ 
    
    //}
    #endregion
    //昆虫类
    class Insect
    {
        public int size = 10;
        public virtual void Bite()//virtual可以被子类重写,不能写在字段里面
        {
            //加上virtual可以说成是一个虚函数
            Console.WriteLine("我不知道怎么咬人");
        }
    }
    //蚊子类
    class Mosquito : Insect
    {
        public override void Bite()
        {
            size = 20;
            Console.WriteLine("我会叮人");
        }
    }
    //蚂蚁类
    class Ant : Insect
    {
        public sealed override void Bite()//override前面加上sealed是不能被重写的
        {
            Console.WriteLine("我会咬人");
        }
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值