2013-06-26 106 views
0

我想從另一個對象的基礎接口創建一個新對象。從另一個對象的基礎接口創建一個新對象c#

IDailyEventBasecurrentEvent的基本接口,並且還DailyEventEntity的的基本接口。

有沒有辦法從currentEvent對象創建新DailyEventEntity對象,而無需重新再次分配所有共享的基礎屬性值?

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

您實現接口,而不是創建它們的對象。 –

+0

如果您需要在您的方法中使用DailyEventEntity對象,爲什麼不將它作爲第二個參數傳遞? –

回答

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); 
0

您無法從界面創建對象。

話雖如此,你可以使用反射實例化一個對象的基類

類似的東西:

var o = Activator.CreateObject(this.GetType().BaseType); 
+0

感謝會太多要求一個例子 – ChampChris

0

currentEvent實現IDailyEventBase接口,但你不能把它分配給DailyEventEntity類,直到它不是同一類型或類型從DailyEventEntity的。

而且我不建議你在CreateDailyEvent方法內部執行此操作,因爲有人可以創建實現IDailyEventBase的類並將此類的對象傳遞給您的方法,那麼運行時會得到InvalidCastException。

相關問題