首页 > 解决方案 > 如何将泛型与充满常量的类一起使用?

问题描述

我希望我的意思很清楚。我有多个充满选项的静态类:

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);
}

但这当然行不通。我会使用接口,但静态类不能实现接口。

有什么办法可以优雅地完成这项工作吗?制作Thing1Thing2单身人士会工作,但这不是一个很好的解决方案。

我可以创建一个结构并将对象放入另一个静态类中,但我想知道您是否可以执行上述操作。

标签: c#generics

解决方案


好吧,您可以创建一个接口并使您的类成为非静态类并从该接口继承:

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);
}

推荐阅读