gpt4 book ai didi

c# - 是否应该使用自引用通用继承,如 Customer : Entity

转载 作者:太空狗 更新时间:2023-10-30 00:36:41 30 4
gpt4 key购买 nike

是否建议使用自引用泛型继承?

public abstract class Entity<T> {
public Guid Id {get; set;}
public int Version {get; set;}

public T Clone() {
...
// clone routine
...
return T;
}
}

public class Customer : Entity<Customer> {
public string CustomerName {get; set;}
...
}

如何将 Customer 转换为基 Entity 类? “客户:实体”有什么优势?我在显示 NHibernate 域建模的示例中看到了这种继承。

在没有泛型的情况下使用“Customer : Entity”是否更好?

最佳答案

您应该在需要时使用它,而不仅仅是因为您可以。在上面的例子中,实现 Clone() 是有一定道理的。 .但是,正如您正确指出的那样,这意味着您的实体类实际上不会有一个公共(public)基类,并且它们真正共有的属性将无法访问。处理这个问题的正确方法是将它分成通用和非通用部分:

public abstract class Entity {
public Guid Id {get; set;}
public int Version {get; set;}
}

public abstract class Entity<T> : Entity where T : Entity<T> {
public T Clone() {
...
// clone routine
...
return T;
}
}

另外,请注意 where我添加到 Entity<T> 声明中的部分- 它确保此类只能用作此递归模式的一部分。

关于c# - 是否应该使用自引用通用继承,如 Customer : Entity<Customer>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1175815/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com