一、三大特性

  封装: 把客观事物封装成类,并把类内部的实现隐藏,以保证数据的完整性

  继承:通过继承可以复用父类的代码

  多态:允许将子对象赋值给父对象的一种能力

二、【封装】特性

  把类内部的数据隐藏,不让对象实例直接对其操作,通过给类及类中的成员变量、属性和方法设置不同的访问修饰符(public、protected、internal、

  protected internal、private)来控制它们的作用范围,以达到封装的目的。

  实例:

  (1)  没有封装的类:

     public class Animal
{
public string _name;
public int _age;
}
static void Main(string[] args)
{
Animal animal = new Animal();
animal._name = "sheep";
animal._age = -;
}

  (2)  封装后的类:

     public class Animal
{
private string _name;
private int _age; public string Name
{
get { return _name; }
set { _name = value; }
} public int Age
{
get { return _age; }
set
{
if (value < || value > )
{
throw (new AggregateException("年龄必须在0~10岁之间!"));
}
_age = value;
}
}
}

二、【继承】特性

  1、通过继承,程序可实现对父类代码的复用,子类继承父类的所有成员(构造函数 、析构函数、静态类、密封类除外),子类无需再定义父类中已有定义的代码。

  2、被继承的类成为父类、基类、超类,而主动继承的类成为子类或派生类,Object是所有类的基类。

  3、当父类和子类中有名称相同的方法时,父类中的方法会被隐藏

  4、里氏替换原则:子类对象可以赋值给父类变量,反之不成立

  5、子类不能对父类的私有成员进行访问,只能对公有成员和保护成员访问,但子类可以通过调用公有成员或保护方法间接的对私有成员进行访问

 实例:

 //基类:Animal
public class Animal
{
private string _name;
private int _age; public string Name
{
get { return _name; }
set { _name = value; }
} public int Age
{
get { return _age; }
set
{
if (value < || value > )
{
throw (new AggregateException("年龄必须在0~10岁之间!"));
}
_age = value;
}
}
} //子类:羊
public class Sheep : Animal
{ } //子类:马
public class Horse : Animal
{ } static void Main(string[] args)
{
Sheep sheep = new Sheep();
sheep.Name = "Xi Yangyang";
sheep.Age = ; Horse horse = new Horse();
horse.Name = "Qian Li";
horse.Age = ;
}

三、【多态】特性

  1、相同类型的对象调用相同的方法表现出不同的行为。

  2、两种表现形式:重载、重写

  3、重载:同一个类中有多个方法的名称相同、参数个数不同或类型不同

  4、重写:使用 virtua l和 override 关键字实现方法重写,只有基类成员声明为virtual 或 abstract,才能被派生类重写。

  5、以下3种情况重写:

    a、当类为普通类时,只有父类的虚方法才能被子类重写,子类实现重写要用关键字override,如果不加override就会隐藏父类的方法,

       隐藏需要加上关键字new,例如:

      public new static void a()

      {

      }

      或

      public static new void a()

      {

      }

     静态类中只能有静态成员,非静态类中可以有静态成员和非静态成员。

     静态方法不能被重写,但可以被隐藏。

             静态成员不能带override、abstract、virtual。
   b、
抽象类中可以有抽象属性、抽象方法和成员实例,继承抽象类的子类必须直接或间接重写所有的抽象方法,而且参数和返回值类型必须完全一致,

     成员实例可以不被重写。

      非抽象类中只能有成员实例。

      抽象类不能直接实例化,但是有构造方法,可以利用里氏替换原则把子类对象赋值给抽象的父类变量。

      抽象方法必须用abstract修饰,而且不能有方法体。

      抽象方法不能用private修饰。

   c、类是单继承,接口是多继承,如果同时继承类和接口的话,接口必须在基类的后面,否则编译会出错。

      接口不能直接实例化,没有构造方法,可以利用里氏替换原则把子类对象赋值给接口类型的父类变量。

      接口中的成员没有访问修饰符,默认是public类型的,而且不能手动添加任何访问修饰符。

      实现接口时不需要override,实现接口的类中的方法的参数和返回值类型必须与接口中定义的类型完全一致。

      接口命名一般以I开头,表示某种功能,实现某一接口表示具备了某一功能。

  6、使用sealed关键字阻止派生类重写基类虚成员。

  7、使用New关键字隐藏基类成员:当子类中需要添加的方法与基类中的方法名相同,使用new关键字隐藏基类方法,但如果想要强制访问基类方法,

    则可使用强制类型转换,把子类强制转换成基类类型,例如:

 //基类:Animal
public class Animal
{
private string _name;
private int _age; public string Name
{
get { return _name; }
set { _name = value; }
} public int Age
{
get { return _age; }
set
{
if (value < || value > )
{
throw (new AggregateException("年龄必须在0~10岁之间!"));
}
_age = value;
}
} public void Eat()
{
Console.WriteLine("动物的吃方法");
}
} //子类:羊
public class Sheep : Animal
{
public new void Eat()
{
Console.WriteLine("羊的吃方法");
}
} static void Main(string[] args)
{
Sheep sheep = new Sheep();
sheep.Name = "Xi Yangyang";
sheep.Age = ;
sheep.Eat();
((Animal)sheep).Eat(); //子类强制转换成基类方法 Horse horse = new Horse();
horse.Name = "Qian Li";
horse.Age = ; Console.Read();
}

    

     

对C#面向对象三大特性的一点总结的更多相关文章

  1. [.net 面向对象编程基础] (12) 面向对象三大特性——继承

    [.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...

  2. [.net 面向对象编程基础] (11) 面向对象三大特性——封装

    [.net 面向对象编程基础] (11) 面向对象三大特性——封装 我们的课题是面向对象编程,前面主要介绍了面向对象的基础知识,而从这里开始才是面向对象的核心部分,即 面向对象的三大特性:封装.继承. ...

  3. [.net 面向对象编程基础] (13) 面向对象三大特性——多态

    [.net 面向对象编程基础] (13) 面向对象三大特性——多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...

  4. 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍

    面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...

  5. C++面向对象三大特性

    面向对象三大特性 继承 public protected private public继承 public protected 不可见 private继承 private private 不可见 pro ...

  6. JAVA基础——面向对象三大特性:封装、继承、多态

    JAVA面向对象三大特性详解 一.封装 1.概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: 只能通过规定的方法访问数据. ...

  7. day20面向对象三大特性 , 类嵌套

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 1.简述面向对象三大特性并用代码表示."""封装:class Account: ...

  8. python 面向对象(三大特性)

    python 面向对象(初级) (思维导图 ↑↑↑↑↑) 概述: 面向过程:根据业务逻辑从上到下垒代码. 函数式:将某功能代码封装至函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...

  9. python 面向对象三大特性(封装 多态 继承)

    今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...

随机推荐

  1. 51nod1326 遥远的旅途(spfa+dp)

    题意: 给出一个无向图,问从1到n是否存在一条长度为L的路径. n,m<=50,1<=路径长度<=10000,L<=10^18 思路: 改变一下思路,我们发现,假设从起点1走到 ...

  2. linux学习之编译-链接

    在Windows下使用习惯了IDE,导致我们对程序的编译链接没有一个清晰的认识,甚至混淆了编辑器和编译器的概念.在学习Linux时,这些问题就暴露出来了. 实际上,我们应该严格区分一个程序从产生到执行 ...

  3. Deep Clustering Algorithms

    Deep Clustering Algorithms 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 本文研究路线:深度自编码器(Deep Autoen ...

  4. 859. Kruskal算法求最小生成树(模板)

    给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数. 求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible. 给定一张边带权的无向图G=(V, E),其中V表示 ...

  5. 将内裤穿在外面的男人(mysql)

    superman 的好处是可以为所欲为,不仅可以修改自己的密码,还能给别人授权,修改别人的密码. 1.修改自己 的密码 首先要先登录mysql, 然后: mysqladmin   -u   root ...

  6. 2019 LOL 全球总决赛

                                        FPS 牛逼 涅槃重生

  7. AntDesign(React)学习-14 使用UMI提供的antd模板

    1.UMI提供了可视化antd模板,可以直接添加到项目中修改用 比如将个人中心添加到项目中 2.选择个人中心,确定 3.成功 4.打开项目 5.Route文件也自动添加 根路由有exact:true后 ...

  8. Web安全测试学习笔记 - 文件包含

    基础知识 文件包含指的是一个文件动态引用另一个文件,这是一种非常灵活的动态调用方式.有点类似Java引用jar包,但区别在于jar包引用后一般是固定不变的(一般不能动态改变所引用的jar包名称),而文 ...

  9. idea 配置 tomcat 教程

    最近在搞一个项目需要用到idea 配置tomcat,翻了翻网上的帖子发现稂莠不齐,最后决定还是自己写个吧!(其实我挺蠢的走了好多的弯路,哎~) 1.首先准备一个需要大家tomcat的工程,然后使用id ...

  10. echart--自己写的例子

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...