2012-11-12 95 views
3

想要徵集關於繼承的構成是否在這裏有意義,如果是的話,這是一個好方法。在這種情況下繼承的構成?

我有一個接口,像這樣:

public interface IUser 
{ 
    string FirstName {get; set} 
    string LastName {get; set} 
} 

有一個「高級」的用戶界面,以及,它具有相同的字段IUSER,但有一些附加功能。 ******中國,EmailAddress的等

應該從IUser這個IAdvancedUser接口繼承並添加自己的屬性,或將含有IUser一個實例中,以及如何使用setter注入來實例化成員,意義呢?如果是後者,是否有一些.Net/C#習慣用法在這種情況下運行良好 - 例如,通過包裝或其他方法將IUser成員公開爲IAdvancedUser

這些是DTO對象,它們中不會有方法,只有屬性。

回答

2

答案是:必須是IAdvancedUser永遠是IUser

在這種情況下:不,使用繼承。

但是,「composition over inheritance」不適用於接口,因爲它們不遵循與類相同的規則。

你可以例如這樣做:

interface IAdvancedFeatures 
interface IUser 
interface IAdvancedUser : IUser, IAdvancedFeatures 

這樣,你就可以使任何東西來實現先進的功能,而不是迫使它是用戶,而在其他情況下,每個人都必須的高級用戶。

我通常會嘗試將界面視爲定義功能而非角色。所以你可以說你應該喜歡作文(比如我的作品IAdvancedUser),但不是和作文類似(你在內部編寫作品)。