gpt4 book ai didi

c# - 来自抽象类的静态方法

转载 作者:行者123 更新时间:2023-11-30 17:32:48 26 4
gpt4 key购买 nike

我知道在这里经常有人问类似的问题,但我一直在寻找可以解决我遇到的问题的东西。

我正在构建一个应用程序,并为“团队”、“经理”和“员工”设置了三个单独的类。我意识到我在为所有三个重复大量代码,所以我定义了一个名为“Worker”的抽象类。

在每个类上我都定义了一个 GetAllX返回和 IEnumerable<X> 的方法,例如:

public static IEnumerable<Manager> GetAllManagers()
{
//Code to get all managers
yield return m
//find next manager and loop
}

我想要的是能够在名为 GetAll 的抽象类中定义一个方法它将返回类型为 T 的 IEnumerable,其中 T 是从我的抽象类继承的类。有什么办法可以实现这样的目标吗?

最佳答案

技术上你可以做

abstract class Worker
{
public static IEnumerable<T> GetAll<T>() where T : Worker
{
//your code
}
}

class Manager : Worker
{
}

class Employee : Worker
{
}

并且此方法调用 var managers = Worker.GetAll<Manager>();


另一种使用不同静态变量的方法,如注释中所述,OP 想要什么。

abstract class Worker<T> where T : Worker<T>
{
protected static string name;

public static IEnumerable<T> GetAll()
{
Console.WriteLine(name);
return Enumerable.Empty<T>();
}
}

class Manager : Worker<Manager>
{
static Manager()
{
name = "Manager";
}
}

class Employee : Worker<Employee>
{
static Employee()
{
name = "Employee";
}
}

并使用

//create object to call static constructors
//this need only once for every concrete class
var test = new Manager();
var test1 = new Employee();

var managers = Worker<Manager>.GetAll();
var employees = Worker<Employee>.GetAll();

从技术上讲,你可以做到,但在我看来,经典存储库是更合适的方法。

关于c# - 来自抽象类的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45864758/

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