2015-09-06 65 views
-3

是什麼這些代碼
1.最好的地方,在C#中創建新的類實例

Public class class1() 
{ ... } 

Public class Main() 
{ 
    public void method() 
    { 
     class1 k = new class1;  <--- 
     ... 
    } 
} 

2.

Public class class1() 
{ ... } 

Public class Main() 
{ 
    class1 k = new class1;  <--- 

    public void method() 
    { 
     k.use(); 
     ... 
    } 
} 

哪裏是更好的地方,一個類來創建實例之間的區別,在第二類的根目錄或每個需要class1的方法和函數中?

+1

這將取決於您退出該方法後需要它。 –

+0

雖然有一個共同點 - 兩個代碼都不會在第一個例子中編譯 – dotnetom

+2

,您的實例k1將可用於您班級中的所有內容。並且只要程序執行或顯式地給出空值,它們就會保持活動狀態。 第二個示例將創建實例k1並在該方法的作用域結束時將其終止。 –

回答

1

我想說這取決於你將如何使用該對象。

它是一次性資源,必須在每次使用它時進行實例化和處理(想到db連接)?然後在該方法中實例化是最安全的方式。

如果容器對象在使用後很快就會被拋棄,並且您想在多個方法中使用依賴關係,那麼在構造函數中或直接在該字段中對其進行實例化即可。

0

最好的辦法不是在代碼中創建新實例,而是使用依賴注入。最好使用一些接口或抽象類。這樣你就不依賴於具體的實現,你的代碼更具可測性,因爲你可以控制什麼是passedThroughConstructor。在編寫SomeOne類的代碼時,您並不在乎創建的SomeTwo的位置,但是會顯示SomeOne依賴於它,並且不能在沒有它的情況下創建它。

public class SomeOne{ 

ISomeTwo _forInternalUse; 
    public SomeOne(ISomeTwo passedThroughConstructor){ 
    _forInternalUse = passedThroughConstructor; 
    } 

    public void SomeOtherMethod(){ 
     _forInternalUse.DoStuff(); 
    } 
}