C#封装、继承、多态

C# 封装继承多态

一、面向对象

什么是对象?对象可以是任何具体的事物,也可以是抽象的事件计划规则。面向对象作为一种思想,可以理解为对对象的具现化赋予功能性。

C#具有面向对象的语言所应有的一切特性:封装、继承与多态,为面向对象三要素。

二、封装

封装就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

如何封装?

  • Public – 允许任何人来访问
  • Internal – 在同一项目中均可访问
  • Protected – 继承时子类可以对基类有访问权
  • Protected Internal – 唯一的一种组合限制修饰符,只可以被本组合体内所有的类和这些类的子类所访问
  • Private --只允许同类中的成员所访问

继承

一个类可以有能力直接从另一个类获取其代码和数据。

派生类(子类)从基类(父类)那里获取其所有成员

派生类又称子类,则基类又称父类

  • 可以从基类中获取得:方法,域,属性,事件,索引指示器
  • 不能获得:构造函数,析构函数

继承模板:

  • public class 派生类:基类

注意:C#只允许单继承。意思就是只能一对一继承。

防止继承:

  • public sealed class XX

派生类如何调用基类成员?

  1. 使用base关键字
    在派生类中 base.基类成员

  2. 派生类在访问基类时有一定的限制,不能访问private的成员;Internal的基类成员只能被同一个程序集中的派生类访问

当派生类与基类成员名一致时,可用this访问本类,base访问基类。

多态

同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。

多态性通过派生类覆写基类中的虚函数方法来实现。

C#中支持两种多态性:

  • 编译时 --重载(overload)
  • 运行时 --虚方法和重写(override)

重载:
可以存在两个或者多个方法名一致的的方法,不过这些方法的参数不同。
调用时以方法参数区分具体调用哪个方法。
例如:

        public int math(int a) //方法一
        {
            int x = a * a;
            return x;
        }
        public double math(double a) //方法二
        {
            double x = a + a;
            return x;
        }

调用:

 var a = math(2);
 var b = math(1.1);

结果: a=4 则 b=2.2;

虚方法与重写:
虚成员:就是在基类中申明了方法、属性、索引器或事件,也就是做一个简单的处理。
使用virtual关键字将成员申明为虚成员。

重写:
在声明时,父类的方法前面加上virtual关键字,子类的方法前面加上override关键字,且与父类方法同名,表示父类的方法可以被子类进行修改和重新定义。

    public class C1
    {
        public virtual int math() //虚方法,等待被重写
        {
            return 1;
        }
    }
    public class C2 : C1  //C2继承于C1
    {
        public override int math()  
        {
            return 2;
        }
    }

调用:

        C1 c1 = new C1();
        Console.WriteLine("屏幕显示是:{0}", c1.math());

        C1 c2 = new C2();
        Console.WriteLine("屏幕显示是:{0}", c2.math());

结果: 返回的值分别为 1、2

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值