将派生类铸造为基类
我有一个通用的基础抽象类,它继承自IComparable,其定义如下
public abstract class BaseClass<T> where T : IComparable
{
protected readonly T Data;
protected BaseClass(T data)
{
Data = data;
}
public abstract T Get();
}
然后我定义了一个类,该类继承自该基类并具有特定的泛型类型,其定义如下:
public class Name : BaseClass<String>
{
public Name(string data) : base(data)
{
}
public override string Get()
{
throw new NotImplementedException();
}
}
由于泛型类型是字符串,并且字符串是从IComparable继承的,所以我希望能够将具有字符串值的新Name对象定义为泛型类型,但是这样定义Name对象时会出现强制转换错误:
BaseClass<IComparable> obj;
obj = new Name("behro0z");
,错误是
错误CS0029无法隐式转换类型
ConsoleApplication1.Name
至ConsoleApplication1.BaseClass<System.IComparable>
ConsoleApplication1
答案 0 :(得分:2)
您要声明类型为Code Description Start_Year End_Year
A Acme 1985 2002
B Coakc 2011 2012
A Jupiter(11) 2011
C Capital Management Corporation 2011
D Diuretics Inc 2011
E Charter 2011
的变量,并将BaseClass<T>
替换为T
。
这是有效的,但这不是IComparable
类的 。即使Name
实现了BaseClass<string>
,它还是来自BaseClass<IComparable>
,不是 string
。
您可以将变量IComparable
声明为obj
类型,或者将其派生为更多类型,BaseClass<string>
。