面向对象的错误

时间:2018-07-02 06:46:21

标签: c# .net

此代码错误的原因是什么

  

将派生类铸造为基类

true

2 个答案:

答案 0 :(得分:1)

您应该收听编译器。您应该收到此错误:

  

在通用类型或方法“ BaseClass”中,类型“ System.IComparable”不能用作类型参数“ T”。从'System.IComparable'到'System.IComparable'没有隐式引用转换。

那是你的第一个问题。

因此您可以将BaseClass<T>更改为:public abstract class BaseClass<T> where T : IComparable

Bu现在您遇到此错误:

  

无法确定条件表达式的类型,因为'Age'和'Name'之间没有隐式转换

这是因为您的DateTime.Now.Ticks == 100 ? new Age(110) : new Name("behroz")不能确保您指定的是通用类型。

现在,如果我尝试将其更改为DateTime.Now.Ticks == 100 ? (BaseClass<IComparable>)new Age(110) : (BaseClass<IComparable>)new Name("behroz"),则会出现以下错误:

  

无法将类型“年龄”转换为“ BaseClass”

     

无法将类型“名称”转换为“ BaseClass”

现在这变得更有趣了。

仅由于Int64IComparable,所以并不意味着表示BaseClass<Int64>BaseClass<IComparable>。不是。

BaseClass<String>BaseClass<IComparable>相同。

对于类型BaseClass<IComparable>Name,您根本无法使用Age

答案 1 :(得分:-5)

您正在尝试启动抽象类,这是错误的。

BaseClass baseClass;

baseClass = new Age(110);

将派生类(即BaseClass)铸造为基类会导致此问题。

您可以根据自己的情况直接调用课程。