2013-09-24 134 views
0

我有這個類:C# - 將靜態類初始化爲非靜態類?

[DataContract] 
public class Connection 
{ 
    [DataMember] 
    public string UserName { get; set; } 

    public Connection(string userName) 
    { 
     UserName = userName; 
    } 
} 

現在我需要這個類的,是的,但在我的項目的一部分,我會真正使用類是這樣的:

public static class Connection 
{ 
    public static string UserName { get; set; } 

    static Connection() 
    { 
    } 
} 

是否有合併的任何方式這個代碼放在一起,所以我可以在我的項目中使用這個類的兩個版本(我希望有一個靜態的Connection實例,但是我想在其他地方有一個Connections列表)?

+5

你想一個單身,還是一個靜態的參考 – SLaks

回答

5

你可以這樣合併代碼:

[DataContract] 
public class Connection 
{ 
    [DataMember] 
    public string UserName { get; set; } 

    public Connection(string userName) 
    { 
     UserName = userName; 
    } 

    public static Connection Default { get; set; } 

    static Connection() 
    { 
     Default = new Connection("username"); 
    } 

} 

...並使用它像這樣:

List<Connection> connections = new List<Connection>(); 

..或像這樣:

string defaultConnectionUserName = Connection.Default.UserName; 
+0

也給你做'列出 ...'的能力,另一部分問題 – Shoe

+0

您的默認連接會與名爲「用戶名」的硬編碼用戶建立連接。我無法理解它是如何有用的。 –

+0

@LuisFilipe,這只是一個例子。您可以從'web.config'或'app.config'或database等讀取默認用戶名。 –

0

您不能使用靜態類作爲類型參數。因此,在你的情況,你不能有:

public List<Connection> { get; set; } 

有關更多信息,請參見this答案由喬恩斯基特。

我建議尋找面向對象編程的SOLID原則,並嘗試將「連接」類的功能抽象爲多個。如果您提供更多關於您想要做什麼的信息,我會很樂意提出建議。