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