2012-08-13 75 views
0

我有以下字段中的下列對象:從抽象引用創建接口+類包裝

class ObjectA 
{ 
    float progress; 
    bool isDone; 
} 

class ObjectB 
{ 
    bool canceled; 
} 

我想創建ObjectC這將是必然,並有ObjectAObjectB領域progressisDonecanceled

我該怎麼做這樣的事情?

這是可能通過dynamic類型或一些Interface + ClassWrapper組合?

ObjectA and ObjectB類型,類別,簽名等不能更改。它們按原樣給出。

+1

請通過縮進行來正確地發佈您的代碼片段 – h1ghfive 2012-08-13 11:38:19

+2

「綁定到」是什麼意思? – 2012-08-13 11:44:15

回答

0

你想要什麼通過正常途徑是不可能的,因爲你的領域是私人的,因此不向任何訪問ObjectAObjectB之外的代碼。

做到這一點的唯一方法 - 我不建議,因爲它打破封裝 - 將使用反射來訪問這些成員。

2

有沒有這樣的事情在C#中的多類繼承的類。做這樣的事情的最好方法是宣佈接口的每個行爲:

interface IA 
{ 
    float Progress {get;} 
    bool IsDone {get;} 
} 

interface IB 
{ 
    bool IsCanceled{get;} 
} 

,也許第三聚合前兩種:

interface IC : IA , IB 
{ 
} 

和實施都在一個班。

class C : IC 
{ 
    public float Progress { get; set; } 
    public bool IsDone { get; set; } 
    public bool IsCanceled { get; set; } 
} 

然後,你必須記住程序對接口而不是類:

class SomeClass 
{ 
    //If only IA features are required 
    void DoSTH(IA c){} 
} 
0

你可以通過組成做到這一點:

public class ObjectC 
{ 
    public ObjectA ProgressInfo { get; set; } 

    public ObjectB CanceledInfo { get; set; } 
} 

或者通過接口:

public interface IProgressable 
{ 
    float Progress { get; } 

    bool IsDone { get; } 
} 

public interface ICancelable 
{ 
    bool Canceled { get; } 
} 

那麼你可以哈五個新類實現兩個接口:

public class ObjectC : IProgressable, ICancelable 
{ 
    ... 
} 
0

您正在尋找multiple inheritance,這是不是C#支持。

一種解決方案是使用接口,但它需要你實現代碼多次:

public interface IFoo1 
{ 
    float Progress { get; set; } 
    bool IsDone { get; set; } 
} 

public interface IFoo2 
{ 
    bool Canceled { get; set; } 
} 

public abstract class ObjectA : IFoo1 
{ 
    public float Progress { get; set; } 
    public bool IsDone { get; set; } 
} 

public abstract class ObjectB : IFoo2 
{ 
    public bool Canceled { get; set; } 
} 

public class ObjectC : IFoo1, IFoo2 
{ 
    public float Progress { get; set; } 
    public bool IsDone { get; set; } 
    public bool Canceled { get; set; } 
} 
+0

我的意思是我不能改變ObjectA和ObjerctB類。所以不能將uinterface添加到它們 – myWallJSON 2012-08-13 11:53:39