【发布时间】:2015-03-24 06:45:27
【问题描述】:
我有以下代码,它有一个 Base 类,其中包含一个抽象模板方法,在派生类中使用具体类型覆盖该方法。
class MyObj
{
private string name;
public string Name { get; set; }
};
class MyObj2
{
private string value
public string Value { get; set; }
}
abstract class Base
{
public abstract string toString<T>(T t);
public void doSomething<T>(T t)
{
string myValue = toString<T)(t);
...
}
};
class MyClass : Base
{
public override string toString<MyObj>(MyObj o)
{
return o.Name;
}
}
class MyClass2 : Base
{
public override string toString<MyObj2>(MyObj2 o)
{
return o.Value;
}
}
但是编译器不喜欢toString() 在MyClass 或MyClass2 中的实现,给出如下错误消息:
“MyObj”不包含“Name”的定义,并且找不到接受“MyObj”类型的第一个参数的扩展方法“MyObj”(您是否缺少 using 指令或程序集引用?)
【问题讨论】:
-
顺便说一句,如果您使用常规名称(即使是示例代码)也很有用 - .NET 中的方法通常以大写字母开头。
-
@Jon,我的错,我主要使用 C++ 编写代码,而 C# 对我来说非常新,感谢您的提示。