有没有办法在C#方法签名中指定"当前类的类型"?

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吗?或者我是否接近这个错误,并且有更好的方法来构建它?

vin*_*ras 5

您可以使用泛型声明基类,并在您的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)