从另一个对象的基接口创建一个新对象c#

时间:2013-06-26 19:36:12

标签: c# interface

我正在尝试从另一个对象的基接口创建一个新对象。

IDailyEventBase currentEvent 的基本界面,也是 DailyEventEntity 的基本界面。

有没有办法从 currentEvent 对象创建新的 DailyEventEntity 对象,而无需再次重新分配所有共享基本属性值?

private bool CreateDailyEvent(EventDefinitionEntity eventApp
        ,IDailyEventBase currentEvent)
    {
        //create daily event
        DailyEventEntity dailyEvent = iDailyEvent as DailyEventEntity;

3 个答案:

答案 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);