Jez*_*Jez 0 c# generics types design-patterns
我正在尝试定义一个其他类将扩展的抽象类,并且他们必须能够将自己序列化为JSON并从JSON反序列化.我想写这样的抽象类:
public abstract class BaseApiModel {
public abstract string ToJson();
public abstract T FromJson(string json);
}
Run Code Online (Sandbox Code Playgroud)
... T当前类的类型在哪里.然后我会写一个像这样的扩展类:
public class ContactApiModel : BaseApiModel {
public string ContactName { get; set; }
[...other properties...]
public override string ToJson() {
[...return serialized JSON string...]
}
public override ContactApiModel FromJson(string json) {
[...return deserialized object...]
}
}
Run Code Online (Sandbox Code Playgroud)
当然这不起作用,因为T在抽象类中没有定义.但是有什么方法可以写"这个方法必须在C#中返回当前类的类型"吗?我只是要让它回来object吗?或者我是否接近这个错误,并且有更好的方法来构建它?
您可以使用泛型声明基类,并在您的ContactApiModel类中将T参数设置ContactApiModel为,如下所示:
public abstract class BaseApiModel<T> {
...
public abstract T FromJson(string json);
}
public class ContactApiModel : BaseApiModel<ContactApiModel> {
...
public override ContactApiModel FromJson(string json) {
[...return deserialized object...]
}
}
Run Code Online (Sandbox Code Playgroud)