C# 将元信息存储到类属性

C# 将元信息存储到类属性,c#,implementation,object-oriented-analysis,C#,Implementation,Object Oriented Analysis,几天来,我一直对这个问题耿耿于怀: 我有一个班级信息 public class Info { private int _no; public int No { get { return _no; } set { _no = value; } } } 该类可以在任何类中的任何位置使用(继承或作为属性)。该财产可被视为与安全相关或不相关。该信息在设计时已

几天来,我一直对这个问题耿耿于怀: 我有一个班级信息

public class Info
  {
    private int _no;

    public int No
    {
      get
      {
        return _no;
      }
      set
      {
        _no = value;
      }
    }
  }
该类可以在任何类中的任何位置使用(继承或作为属性)。该财产可被视为与安全相关或不相关。该信息在设计时已知,需要为该特定属性存储

因此,对于某些使用该类作为属性的类,我希望相应地设置成员“No”

  public class IsRelevant
  {
    private Info _prop = new Info();
    public Info Prop { get { return _prop; } set { _prop = value; } }
  }

  public class IsNotRelevant
  {
    private Info _prop = new Info();
    public Info Prop { get { return _prop; } set { _prop = value; } }
  }
第一次尝试时我正在考虑引入如下自定义属性:

[SecurityRelevant(RelevantLevel = SecurityRelevant.SecurityRelevant_Level1, IsRelevant = true)]
然后,在实例化类“IsRelevant”后,我将遍历属性及其类,并根据需要设置自定义属性:

IsRelevant.Prop.No=>IsRelevant=true, 例如IsNotRelevant.Prop.No=>IsRelevant=false

但据我所知,类的元信息(属性)是为每种类型创建一次的实例。因此,如果我更改自定义属性的值,我将为该类的所有实例更改它(因为它绑定到该类型!)

编辑:这不能按此处所述完成:每次访问自定义属性时,都将创建一个具有默认值的新实例。对该属性的更改不会存储在那里

第二种方法是将该信息存储在外部类中,并保存所有模型路径等。我不喜欢这样,因为该信息属于特定类

第三种方法是实现一个接口,其中包含一个存储该信息的字典:

  public interface ISecRelevant
  {
    Dictionary<PropertyInfo, bool> SecInfo { get; set; }
  }
每当我创建类B的实例时,我都需要将元信息附加到

InstanceOfB.ThePropertyWithMetadata.MetaProperty

另一方面,每当我创建类C的实例时,我不想将任何元信息附加到该属性。我想在用户界面中显示元信息,并向用户提供有关该属性的更多信息。
因此,我确实知道何时分配元信息,但不能在设计时将其放入类中。希望这能澄清问题:-)

您的第一次尝试看起来是正确的。只需确保将属性放在种类信息的属性上,而不是类信息本身。第一个“look”是正确的,但它不是;-)因为,每次访问属性时,它们都会新实例化,避免任何持久性,就像我不理解的这里所说的那样。你想坚持什么?属性的值不是由使用代码的类的开发人员选择的吗?你的问题让我认为这是一个静态值,而不是可变值。我试图改进这个问题。基本上,我想坚持财产是否与安全相关。这就是全部。是的,属性值由开发人员在->设计时选择。那么静态属性有什么问题?
Class A {
  public int MetaProperty; // (this it the propert where i might want to add meta info)
}

Class B {
  public A ThePropertyWithMetadata;
}

Class C{
  public A TheProperty;
}