C#-面向对象三大特性

封装:

封装就是将成员变量和成员方法等集合在一个个的类中,通过给类及类中的成员变量、属性和方法设置不同的访问修饰符(public、protected、internal、protected internal、private)来控制它们的作用范围,使用时调用它的方法,或者给它的变量赋值。封装的意义在于保护或者防止代码(数据)被我们无意中破坏。 

书面的解释如下:
每个对象都包含它能进行操作所需要的所有信息,因此对象不必依赖其它的对象来完成自己的操作。

继承:

以人为例,每个人都有姓名,年龄,和吃穿住行等行为。如果我们把每个人的代码都写出来,这些将有很多重复,而且代码量太大。如果只构建一个人类,其他的人可以直接使用他的属性和方法,将会给我们带来大大的便利。这就是继承。

注意:

1.继承具有传递性,由A:B B:C=>A:C 

2.构造方法不能继承 

3.C#只允许单继承,一个类只能继承于一个父类 

4.方法名相同(方法重写),最终使用的是子类的方法。

5.子类拥有父类非private的属性和功能;比如protected表示继承时子类可以对基类有完全访问权,也就是说,用protected修饰的类成员,对子类公开,但不对其他类公开。

书面的解释如下:
对象的继承代表一种"is-a"的关系,假如两个对象A和B,如果可以描述为"B就是A",那么则表示B可以继承自A。

多态:

多态性是指“多种行为”。同样的方法调用后,执行不同的操作,运行不同的代码,在不同的类中有不同的体现。多态性可以简单概述为“一个接口,多种方法”。

多态分为静态多态和动态多态。静态多态,函数的响应是发生在编译时;动态多态,函数的响应是发生在运行时。

静态多态:

分别为函数重载和运算符重载。

函数重载:同一个类中有多个方法的名称相同、参数个数不同或类型不同。(同一个类中有多个方法名称相同、参数个数相同、参数类型相同、返回值类型不同,这样不属于重载,编译时会报错。) 

函数重载举例:

using System;
namespace PolymorphismApplication
{
   class Printdata
   {
      void print(int i)
      {
         Console.WriteLine("Printing int: {0}", i );
      }

      void print(double f)
      {
         Console.WriteLine("Printing float: {0}" , f);
      }

      void print(string s)
      {
         Console.WriteLine("Printing string: {0}", s);
      }
      static void Main(string[] args)
      {
         Printdata p = new Printdata();
         // 调用 print 来打印整数
         p.print(5);
         // 调用 print 来打印浮点数
         p.print(500.263);
         // 调用 print 来打印字符串
         p.print("Hello C++");
         Console.ReadKey();
      }
   }
}

 结果:

Printing int: 5
Printing float: 500.263
Printing string: Hello C++

 调用同样名称的方法,因为参数类型不同,结果不同。

动态重载:

C# 允许您使用关键字 abstract 创建抽象类,用于提供接口的部分类的实现。当一个子类继承自该抽象类时,实现即完成。抽象类包含抽象方法,抽象方法可被子类实现。子类具有更专业的功能。动态多态性是通过 抽象类 和 虚方法 实现的。

请注意,下面是有关抽象类的一些规则:

您不能创建一个抽象类的实例。
您不能在一个抽象类外部声明一个抽象方法。
通过在类定义前面放置关键字 sealed,可以将类声明为密封类。当一个类被声明为 sealed 时,它不能被继承。抽象类不能被声明为 sealed。
当有一个定义在类中的函数需要在继承类中实现时,可以使用虚方法。虚方法是使用关键字 virtual 声明的。虚方法可以在不同的继承类中有不同的实现。对虚方法的调用是在运行时发生的。

重写:函数名和参数完全相同只不过内部实现不同,不能同时处于一个类的内部。

多态通过虚函数(virtual)来实现,虚函数允许子类重新定义成员函数,子类重新定义父类的做法叫做重写。重写分为两种:直接重写成员函数和重写虚函数,只有重写了虚函数才能更好的体现C#的多态。

三大特性之间的关系:

1、继承时父类中的内容需要封装。通过访问修饰符,来限制访问,如有些方法子类不能使用,则用private来修饰。

你可能感兴趣的:(C#,C#基础)