用户在程序中会遇到 this 和 base 关键字,this 关键字代表的是当前类的对象,而 base 关键字代表的是父类中的对象。
方法隐藏和重写方法有区别吗?
class Program
{
static void Main(string[] args)
{
A a1 = new B();
a1.Print(); //A
A a2 = new C();
a2.Print(); //C
}
}
class A
{
public virtual void Print()
{
Console.WriteLine("A");
}
}
class B :A
{
public new void Print()
{
Console.WriteLine("B");
}
}
class C :A
{
public override void Print()
{
Console.WriteLine("C");
}
}
//从上面的执行效果可以看出,使用方法隐藏的方法调用的结果是父类 A 中 Print 方法中的内容,而使用方法重写的方法调用的结果是子类 C 中 Print 方法中的内容。
//因此方法隐藏相当于在子类中定义新方法,而方法重写则是重新定义父类中方法的内容。
//从上面的代码也可以看出,在“A a1=new B()”语句中 A 类是父类、B 类是子类,相当于将子类转换成父类,即隐式转换。
//如果需要将父类转换成子类,则需要强制转换,并且在强制转换前需要先将所需的子类转换成父类,示例代码如下。
A a2=new C(); //子类转换成父类
C c=(C) a2; //父类转换成子类
c.Print();
文章目录
在 C# 语言中仅支持单重继承,主要用于解决代码的重用问题。
为了将继承关系灵活运地用到程序设计中,在 C# 语言中提供了接口来解决多重继承的关系。
在编程中灵活地使用类之间的继承关系能很好地实现类中成员的重用,有利于类的使用。
在 C# 语言中所有类都是从 Object 类继承而来的,Object 类中的属性和方法可以被用到任何类。
C#继承:基类和派生类
继承的思想实现了属于(IS-A)关系。例如,哺乳动物属于(IS-A)动物,狗属于(IS-A)哺乳动物,因此狗属于(IS-A)动物。
C# 继承的特点
• 派生类是对基类的扩展,派生类可以添加新的成员,但不能移除已经继承的成员的定义。
• 继承是可以传递的。如果 C 从 B 中派生,B 又从 A 中派生,那么 C 不仅继承了 B 中声明的成员,同样也继承了 A 中声明的成员。
• 构造函数和析构函数不能被继承,除此之外其他成员能被继承。基类中成员的访问方式只能决定派生类能否访问它们。
• 派生类如果定义了与继承而来的成员同名的新成员,那么就可以覆盖已继承的成员,但这并不是删除了这些成员,只是不能再访问这些成员。
• 类可以定义虚方法、虚属性及虚索引指示器,它的派生类能够重载这些成员,从而使类可以展示出多态性。
• 派生类只能从一个类中继承,可以通过接口来实现多重继承。
C# Object类简介
Object 类是 C# 语言中最原始、最重要的类,是所有类的“祖先”,每个 C# 类都是它的子类,它实现了每个类都必须具有的基本方法。
这里指的“所有类”,即不管是 C# 系统所提供的标准类,还是用户自行編写的类,都是从Object类直接或间接继承而来,它是类层次结构中的顶级类,即 C# 树型类层次结构的“根”。
Object 类中的属性和方法可以被用到任何类。
当編程者定义一个类时没有使用关键字 Extends 指明它的父类,则編译器认为该类从 Object 类继承而来。
在 Object 类中提供了 4 个常用的方法,即 Equals、GetHashCode、GetType 以及 ToString 方法。
既然任何一个类都继承了 Object 类,这 4 个方法也可以被任何类使用或重写。
C# Equals方法:判断两个对象是否相等
C# Equals 方法主要用于比较两个对象是否相等,如果相等则返回 True,否则返回 False。
如果是引用类型的对象,则用于判断两个对象是否引用了同一个对象。
在 C# 语言中,Equals 方法提供了两个,一个是静态的,一个是非静态的,具体的定义如下。
Equals (object ol, object o2); //静态方法
Equals (object o); //非静态方法
//False
Student stu1 = new Student();
Student stu2 = new Student();
bool flag = Equals(stu1, stu2