Если вы имеете в виду количество открытых свойств, используйте явную реализацию интерфейса.
Если вы имеете в виду поля (и пространство объектов для разреженных объектов): вы всегда можете использовать пакет свойств для реализации свойства.
Для примера на 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
не реализует ни один из интерфейсов, но предоставляет доступ к ним как к свойствам.