C#中的结构体能不能继承父类?
如果不能继承的话,那么C#中的Size,也是一个结构体,在其中就重写了Equals和其他几个Object中的方法,这是怎么回事?...
如果不能继承的话,那么C#中的Size,也是一个结构体,在其中就重写了Equals和其他几个Object中的方法,这是怎么回事?
展开
5个回答
展开全部
所有结构体都继承ValueType父类,但它们本身不能被其它类继承。
C#中的父类与子类的继承关系与C和C++中的类似,这里先阐述最重要的一点:假如子类继承了父类,那么子类可以强制转换为父类,并且保证编译和运行都不出错;但是父类强制转换成子类的时候,编译可以通过运行通不过。
实际上:将子类强制转换为父类之后,在用这个父类强制转换为另外一个子类的时候编译和运行也都能通过;只是如果将父类直接转换为子类的时候运行会出错。这就好比:假设父类是一个装了5个“苹果”的“小型篮子”,而子类则是一个装了5个“苹果”和5个”西瓜“的大型篮子;将子类强制转换为父类<=>把父类的”小型篮子“换成”大型篮子“,但还是只装5个”苹果“(将父类的引用指向子类,但父类只能调用父子自身的变量和方法),之后再用这个父类强制转换为另外一个子类<=>向”大型篮子“里面装入5个”西瓜“送给子类的引用;而将父类直接转换为子类<=>用父类的”小型篮子“装”5个苹果和5个西瓜“送给子类的引用(当然是装不下)
另外一个值得非常注意的地方是:无论是子类强制转换赋给父类,还是父类(由子类强转得到)强制转换为子类;类对象是根据声明的类型(子类或父类)去调用其变量和函数的,与赋值无关。
可以看出:类的实例对象在调用其变量和方法时,确实是以 声明 成为的类为依据的。
C#中的父类与子类的继承关系与C和C++中的类似,这里先阐述最重要的一点:假如子类继承了父类,那么子类可以强制转换为父类,并且保证编译和运行都不出错;但是父类强制转换成子类的时候,编译可以通过运行通不过。
实际上:将子类强制转换为父类之后,在用这个父类强制转换为另外一个子类的时候编译和运行也都能通过;只是如果将父类直接转换为子类的时候运行会出错。这就好比:假设父类是一个装了5个“苹果”的“小型篮子”,而子类则是一个装了5个“苹果”和5个”西瓜“的大型篮子;将子类强制转换为父类<=>把父类的”小型篮子“换成”大型篮子“,但还是只装5个”苹果“(将父类的引用指向子类,但父类只能调用父子自身的变量和方法),之后再用这个父类强制转换为另外一个子类<=>向”大型篮子“里面装入5个”西瓜“送给子类的引用;而将父类直接转换为子类<=>用父类的”小型篮子“装”5个苹果和5个西瓜“送给子类的引用(当然是装不下)
另外一个值得非常注意的地方是:无论是子类强制转换赋给父类,还是父类(由子类强转得到)强制转换为子类;类对象是根据声明的类型(子类或父类)去调用其变量和函数的,与赋值无关。
可以看出:类的实例对象在调用其变量和方法时,确实是以 声明 成为的类为依据的。
展开全部
namespace System
{
// 摘要:
// 提供值类型的基类。
[Serializable]
[ComVisible(true)]
public abstract class ValueType
{
// 摘要:
// 初始化 System.ValueType 类的新实例。
protected ValueType();
// 摘要:
// 指示此实例与指定对象是否相等。
//
// 参数:
// obj:
// 要比较的另一个对象。
//
// 返回结果:
// 如果 obj 和该实例具有相同的类型并表示相同的值,则为 true;否则为 false。
public override bool Equals(object obj);
//
// 摘要:
// 返回此实例的哈希代码。
//
// 返回结果:
// 一个 32 位有符号整数,它是该实例的哈希代码。
public override int GetHashCode();
//
// 摘要:
// 返回该实例的完全限定类型名。
//
// 返回结果:
// 包含完全限定类型名的 System.String。
public override string ToString();
}
}
你说的结构体其实重写的是这个
追问
我想知道的是:既然不能继承,那怎么又能重写呢?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在C#中所有的类型都是继承于object的,所有所有的类都可以重写Equals
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
所有结构体都继承ValueType父类,但它们本身不能被其它类继承。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不可以不可以不可以
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询