我的类在开发过程中可能会或可能不会更改其名称(和成员)。我的类(在大多数情况下)像枚举一样使用,但我不能使用枚举,因为我需要更多的功能。由于类(显然)在表面下没有表示它们的整数,因此我需要创建一些具有类似功能的解决方案。换句话说,我希望每个类都由一个整数(或其他一些唯一标识符)表示。
我创建了这个属性:
public class IdAttribute : Attribute
{
private int id = -1;
public IdAttribute(int index)
{
this.id = index;
}
public int Id
{
get
{
return id;
}
}
}
我使用它如下:
[Id(0)]
public class Hello: Core { }
[Id(1)]
public class Bye: Core { }
正如您所看到的,它很容易出错,因为我不希望任何类具有相同的 ID。因此,最理想的是我想要一个自动生成的 id,但是如果我改变了关于类的任何东西,例如类名或其成员,我不希望它改变。
实现这一目标的最佳方法是什么?
(我知道在 Java 中,一旦你创建了一个 Serializable 类,你就会得到一个自动生成的 id(在 C# 中有这样的东西吗?)。)
编辑:我“不能”只使用枚举的原因是(主要是)方便。我有在编辑器中公开字段的类。在这个编辑器中,我只能选择适当的“枚举”,在某些情况下,只会显示从“核心”继承的枚举,而在其他情况下,它们可能从“工具”或其他一些类继承。我希望澄清一点。
不确定为什么需要这样做,但您可以执行以下操作:
[AttributeUsage(AttributeTargets.Class)]
public class IdAttribute:Attribute
{
public Guid Id { get; }
public IdAttribute(string id)
{
Id = new Guid(id);
}
}
你会像这样使用它:
[IdAttribute("7d7952d1-86df-4e2e-b040-fed335aad775")]
public class SomeClass
{
//example, you'd obviously cache this
public Guid Id => GetType().GetCustomAttribute<IdAttribute>().Id;
//...
}
待办事项,即Guid
小号不是随机的。如果您需要一个随机 ID,那么这不是解决方案。为Guid
您的问题生成阅读评论。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句