gpt4 book ai didi

C#如何使工厂方法返回子类类型

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

[主要编辑,我的第一篇文章有​​些误导。我的道歉]

给定一个类,例如:

public class DatabaseResult{
public bool Successful;
public string ErrorMessage;

//Database operation failed
public static DatabaseResult Failed(string message) {
return new DatabaseResult{
Successful = true,
ErrorMessage = message
};
}
}

我如何实现子类,这样我就可以添加额外的属性来表示与特定操作相关的数据(例如 SELECT 类型查询中的 MatchedResult),而无需实现该静态故障函数?如果我尝试使用普通继承,返回类型将是父类。例如:

DoThingDatabaseResult : DatabaseResult {
public IEnumerable<object> SomeResultSet;
public static Successful(IEnumerable<object> theResults){
return new DoThingDatabaseResult {
Successful = true,
ErrorMessage = "",
SomeResultSet = theResults
};
}
//public static DatabaseResult Failed exists, but it's the parent type!
}

目标是避免需要为每个子类实现复制 Failed 静态函数。

最佳答案

使其递归通用:

public class BankAccount<T> where T : BankAccount<T>, new()
{
public T SomeFactoryMethod() { return new T(); }
}

public class SavingsAccount: BankAccount<SavingsAccount>{}

您会注意到我将工厂方法设为非静态,因为静态方法不会被继承。

关于C#如何使工厂方法返回子类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24705030/

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