我希望大家能清楚我的意思。我有多个充满选项的静态类:
static class Thing1
{
public const string Name = "Thing 1";
// More const fields here.
}
static class Thing2
{
public const string Name = "Thing 2";
// More const fields here.
}
现在我想使用这些选项来创建一个包含这些类之一的内容的类。
public void Create<T>()
{
var foo = new Foo(T.Name);
foo.Prop = T.Something;
if (T.HasValue)
foo.Add(T.Value);
}
但这当然行不通。我会使用接口(interface),但静态类无法实现接口(interface)。
有什么办法可以优雅地完成这项工作吗?使 Thing1
和 Thing2
单例可以工作,但这不是一个很好的解决方案。
我可以创建一个结构并将对象放入另一个静态类中,但我想知道您是否可以执行类似上面的操作。
最佳答案
好吧,您可以创建一个接口(interface)并使您的类成为非静态并从此接口(interface)继承:
public class Thing1 : IThing
{
public string Name { get; } = "Thing 1";
// More const fields here.
}
public class Thing2 : IThing
{
public string Name { get; } = "Thing 2";
// More fields here.
}
interface IThing
{
string Name { get; }
}
然后将它与类型参数约束一起用于您的方法:
public void Create<T>(T t) where T : IThing
{
// Now compiler knows that `T` has all properties from `IThing`
var foo = new Foo(t.Name);
foo.Prop = t.Something;
if (t.HasValue)
foo.Add(t.Value);
}
关于c# - 如何在充满常量的类中使用泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59413569/