【发布时间】:2011-01-05 14:18:46
【问题描述】:
我想不出一个好的标题,我很抱歉。随意将其更改为更合适的内容;我会很感激的。
我在这里处于一个不寻常的位置(或者可能不是那么不寻常)。我有一个基本类型,它将从中分支出许多扩展其功能但保持相当一致的类型。其中一些或多或少是重复的,但以不同的方式呈现数据。它们都可以以几乎相同的方式进行管理,所以我决定做的是创建一个“合并”类,它将采用两个或更多这样的对象并允许同时控制它们,但我已经诉诸于使用反射。如果我要重新定义基类的所有成员并简单地重定向所有集合/获取/等,这只是简单的错误,因为如果基类到我“合并”的类型是永远改变,合并类也必须改变。
但这会导致性能成本,我认为这是可以避免的。性能不仅来自反射,还来自可预测的装箱/拆箱在反射期间。
这是我正在做的伪代码示例:
class SomeBase
{
public virtual bool SomeBool { get; set; }
}
class SomeDerived : SomeBase
{
// ... extends SomeBase
}
class SomeMerger
{
private SomeBase[] collection;
public SomeMerger(SomeBase[] collection)
{
this.collection = collection;
}
public void SetProperty(string propertyName, object value)
{
for (int i = 0; i < this.collection.Length; i++)
{
PropertyInfo pi = collection[i].GetType().GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance);
if (pi != null)
pi.SetValue(collection[i], value, null);
}
}
// .. etc
}
现在,我希望 能够像访问合并类中的单个实体一样访问成员(例如,“SomeMergerObject.SomeBool = true”将设置所有它合并为 true 的所有对象中的 SomeBool 属性,使语法更自然)。但是,我认为这样做的唯一方法是重新定义基类的所有方法和属性并将调用重定向到它们(我认为这不正确)。有没有更清洁/更好的方法来实现这一目标?
抱歉,如果我在解释这方面做得不好。如果您感到困惑,请大喊大叫,我会尽力澄清。 :)
编辑:
我想我需要澄清一下。我想当我说“我有这个基本类型等”时我是在误导——实现是目前的样子,而不是 我的,我试图做的只是让它更容易一起工作。我没有为几个在可见性状态等区域共享的对象设置基本属性(例如),而是认为这将是一个很好的功能(尽管是一个微不足道的功能,而且工作量超过了它的价值......但出于好奇,为什么不探索这个想法?)使一组对象表现得像一个对象。这甚至算不上一个问题,只是一个我想调情的改进想法。
我并不是在建议“一种新的语言功能”,我的问题的语气是有没有办法做到这一点,一种干净而正确的方法。我想我的询问很糟糕,对此感到抱歉。
【问题讨论】:
-
这听起来像是你在制造问题。也许您可以发布更多关于您的情况的详细信息 - 对于您想要实现的目标,肯定有更好的设计。
标签: c#