我正在尝试在基类中创建一个方法,该方法能够返回派生类型。它不必实际驻留在基类中,但我不想在所有派生类中实现该方法。
像这样。
public class Error
{
protected Error() { }
public string Message { get; protected set; }
public static Error Because(string msg)
{
return new Error() { Message = msg };
}
}
然后我创建了两个派生类型:
public class MyError : Error
public class OtherError : Error
我可以使用Because
实例化对象,而不需要进一步的实现。
我知道我可以像这样进行实现:
public static T Because<T>(string message)
where T : Error
{
var error = default(T);
error.Message = message;
return error;
}
但是我必须指定类型参数:
MyError err = Error.Because<MyError>("My error");
或者
MyError simp = MyError.Because<MyError>("My error");
我希望能够像这样调用它:
MyError myError = MyError.Because("Something went wrong");
OtherError myError = OtherError.Because("Something else went wrong");
Error.Because<MyError>("Something went wrong")
这样的语法。既然你在编译时已经知道类型了,我看不出你提到的语法有什么优势。实际上,OtherError.Because
解析成的就是这个样子,因为静态成员不会被继承。 - MakePeaceGreatAgain