c# 属于面向对象语言的一种,是一类以对象作为 基本程序结构单位的程序设计语言。指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。
而三大特性指的是在程序编程中,编写对象时遵守的三大原则(封装、继承、多态)。以达到可拓展、可重用、可维护的目的。
目录
1.对象(类):
将某类人或物体称为某类对象,此类对象具有相似的行为或相似的特点。所以有句:“物以类聚,人以群分”,可以解释对象类的概念。
2.封装:
封装指的是将对象的状态和行为良好的编写在本类对象中。不能将一个小狗的尾巴长度写在一个人的对象中,不能将一个人两条腿走路的行为写在小猫对象中。同时可以修改状态行为的访问权限修饰符,关闭外部对内部成员的调用,降低其他对象与本对象的关联耦合度。
状态(字段):
一个对象有他的名字、年龄或其他,此称为该对象的字段,用于描述或记录对象的状态。
行为(方法):
一个对象吃饭、喝水或其他,此动作称为该对象的行为,用于执行对象的行为逻辑。
3.继承:
在编程中可以通过继承将一类对象x的行为状态传给另一类对象y,y就无需再次编写行为状态,可以通过调用a实现继承来的逻辑,子类可以通过继承多个父类以达到多个行为拓展的目的。
子类可以继承单个父类,父类也可以派生多个子类;或可选择单继承;或父类只担虚名没有具体的行为给子类继承(抽象类);或者有的类不允许作为父类派生也是可以的(密封类)。
在分类概念中:
- 将生物类分为人类和动物类
- 动物类可以分为犬类和马类
父类(基类):
当前类对象可以分为另外其他分类对象,当前类称为父类或基类(基本的类);父类可以选择将自己的类成员继承给子类,使得子类可以拥有父类的行为状态。
子类(派生类):
由父类分出来的其他类称为父类的子类或派生类;子类拥有了父类的行为状态,达到了代码的复用性,减少重复代码。子类可以在继承中额外增加子类自己的行为状态,将行为描述的更细致。
分类:
而分类时的分类原则就是继承的体现:父类a有他自己的状态和行为,子类b通过父类a派生同样拥有了父类a的行为状态,若子类b再次作为父类b派生其他子类c,那么c就同时拥有了a、b的行为状态。
相反 父类是无法得到子类自己的行为状态的。
4.多态:
多态是在继承中一起体现的。指在继承关系下,使用不同的类型对象调用同一方法却能实现不一样的操作。在多态的使用下,可以将类型转换增加代码的灵活性和抽象性
向上转型:
从笼统角度来讲,一个子类对象 既是子类类型 又是父类类型。
子类对象可以选择重写或重载继承来的行为方法。若以子类类型去调用方法,调用的是子类自己的方法,若以子类的父类类型去调用方法,调用的是父类中的方法。子类的对象使用父类类型这一操作就称为向上转型。
向下转型:
父类类型的对象是无法得到子类里的行为状态的,但在有些情况下,已经提前将已知子类对象向上转型为父类对象时,此父类是可以通过关键字 is 判断当前父类对象原本是否是某子类类型,再通过 关键字as 将父类对象转向子类对象,此操作称为向下转型。
using System;
namespace CCCC
{
class Program
{
static void Main(string[] args)
{
Animal tAni1 = new Animal();//一个动物类型的对象
tAni1.Sleep();//输出:动物睡觉
Console.WriteLine(tAni1.GetType());//类型为 Animal
Console.WriteLine(tAni1 is Horse);//tAni1不是小马类型
Dog tDog1=new Dog();//一个小狗类型的对象
tDog1.Sleep();//调用了继承于Animal的方法 输出:动物睡觉
Console.WriteLine(tDog1.GetType());//类型为 Dog
Horse tHorse1=new Horse();
tHorse1.Sleep();//调用了继承于Animal的方法 并修改成子类行为的方法 小马睡觉
Console.WriteLine(tHorse1.GetType());//类型为 Horse
Console.WriteLine(tHorse1 is Animal);//tHorse1 同时也是动物类型
Animal tAni2=new Horse();//以Animal的类型 创建一个Horse实例的对象
tAni2.Sleep();//调用了继承于Animal的方法 并修改成子类行为的方法 小马睡觉
Console.WriteLine(tAni2.GetType());//类型为 Horse
Console.WriteLine(tAni2 is Animal);//tAni2 同时也是动物类型
Console.WriteLine(tAni2 is Horse);//tAni2 同时也是小马类型
}
}
//动物类
class Animal
{
public virtual void Sleep()//方法 行为
{
Console.WriteLine("动物睡觉");
}
}
//小狗 继承动物
class Dog : Animal
{
}
//小马 继承动物
class Horse : Animal
{
public override void Sleep()//方法 行为
{
Console.WriteLine("小马睡觉");
}
}
}