强制实现可以在不实例化类

时间:2017-10-07 22:02:00

标签: c# interface metadata

无需创建类的对象即可访问

conststatic类型属性/字段:

[TestFixture]
public class TemporaryTests
{
  [Test]
  public void TmpTest1()
  {
    Assert.AreEqual("Name", TestClass.Name);
    Assert.AreEqual("Description", TestClass.Description);
  }

  private class TestClass
  {
    public const string Name = "Name";
    public static string Description = "Description";
  }
}

是否可以在接口中定义这些属性/字段,以便实现该接口的类实现该字段?

我想要完成的是让每个实现某个界面的课程提供一种方式来访问他们的口语名称"和描述(每个类应该有自己的实现/元信息)

编辑:为了清楚起见:我确实意识到我不能在接口中放置consts或statics,因为我之前发布的研究已经发现了。我想知道的是,是否有办法强制实现某个接口的类包含可以访问的元信息,而无需创建该类的对象。

1 个答案:

答案 0 :(得分:0)

以下代码可能是另一种解决方案。

public interface IDesc
{
    string Name { get; }
    string Description { get; }
}

public static class Desc<T> where T : IDesc, new()
{
    public static string Name
    {
        get
        {
            var property = typeof(T).GetProperty("Name");

            return property.GetValue(new T()) as string;
        }
    }

    public static string Description
    {
        get
        {
            var property = typeof(T).GetProperty("Description");

            return property.GetValue(new T()) as string;
        }
    }
}

public class MyClass : IDesc
{
    public string Name { get { return "name of class"; } }
    public string Description { get { return "description"; } }
}

用法

var name = Desc<MyClass>.Name;
var description = Desc<MyClass>.Description;