如果您指的是公共属性的数量,请使用显式接口实现。
如果您指的是字段(以及稀疏对象的对象空间):您始终可以使用属性包来实现属性。
对于 C# 示例:
string IDesigned.ApprovedBy {
get {return GetValue<string>("ApprovedBy");}
set {SetValue("ApprovedBy", value);}
}
带有值的字典:
readonly Dictionary<string, object> propValues =
new Dictionary<string, object>();
protected T GetValue<T>(string name)
{
object val;
if(!propValues.TryGetValue(name, out val)) return default(T);
return (T)val;
}
protected void SetValue<T>(string name, T value)
{
propValues[name] = value;
}
请注意,SetValue
这也是任何通知的好地方——例如,INotifyPropertyChanged
在 .NET 中实现观察者模式。许多其他架构也有类似的东西。您可以对对象键执行相同的操作(例如如何EventHandlerList
工作),但字符串键更易于理解;-p
这只会占用与正在使用的属性一样多的空间。
最后一个选择是封装各个方面;
class Foo {
public bool IsDesigned {get {return Design != null;}}
public IDesigned Design {get;set;}
// etc
}
这里Foo
没有实现任何接口,但提供了对它们作为属性的访问。