我正在尝试从另一个对象的基接口创建一个新对象。
IDailyEventBase 是 currentEvent 的基本界面,也是 DailyEventEntity 的基本界面。
有没有办法从 currentEvent 对象创建新的 DailyEventEntity 对象,而无需再次重新分配所有共享基本属性值?
private bool CreateDailyEvent(EventDefinitionEntity eventApp
,IDailyEventBase currentEvent)
{
//create daily event
DailyEventEntity dailyEvent = iDailyEvent as DailyEventEntity;
答案 0 :(得分:0)
您无法从界面创建对象。
说过你可以使用反射来实例化对象的基本类的对象。
类似的东西:
var o = Activator.CreateObject(this.GetType().BaseType);
答案 1 :(得分:0)
currentEvent实现了IDailyEventBase接口,但是你不能将它分配给DailyEventEntity类,直到它与DailyEventEntity派生的类型或类型不同。
我不建议你在CreateDailyEvent方法中执行此操作,因为有人可以创建实现IDailyEventBase的类,并将此类的对象传递给您的方法,这将使您在运行时获得InvalidCastException。
答案 2 :(得分:0)
听起来你想保留一个现有的对象(某种类型,实现一个接口)并将它包装(“装饰”)到另一个实现其他附加接口的对象中。这可以通过“聚合”现有对象并将该接口的所有方法委托给内部对象来实现。
这是类如何将实现委托给现有对象的示例:
interface IDailyEventBase
{
void MethodOne();
}
class SomeEvent : IDailyEventBase ...
class DailyEventEntity : IDailyEventBase
{
IDailyEventBase inner;
public DailyEventEntity(IDailyEventBase inner)
{
this.inner = inner;
}
public void MethodOne()
{
// delegate directly to wrapped class. You can also add more code here.
return inner.MethodOne();
}
// other methods of this class (may use properties of "inner" too)
public void OtherMethod()...
}
使用示例:
IDailyEventBase other = new SomeEvent();
var delegatingDailyEvent = new DailyEventEntity(other);