2012-05-15 63 views
1

看從開放和封閉源代碼項目的一些C#代碼,我看到的是私人的,有時公共方法旨在recive參數,而不是直接訪問實例變量來提取他們需要設計私人梅索德

參數的良好做法
class A 
    { 
    private B b; 

    public void Methode1() 
    {    
     Methode2(b.SomeProperty); 
    }     

    private void Methode2(string param) 
    {   
    } 
    } 

這被認爲是一種好的做法,或者它只是一種編程方式?

回答

3

是的,正常的。也可考慮移動Methode2B類(Tell, don't ask原則):

class A 
    { 
    private B b; 

    public void Methode1() 
    {    
     b.Methode2(); 
    } 
    } 

什麼是壞的 - 傳遞整個對象作爲參數的方法,當你只需要值,它的屬性(不傳遞給方法的更多,比它需要執行):

class A 
    { 
    private B b; 

    public void Methode1() 
    {    
     Methode2(b); 
    }     

    private void Methode2(B b) 
    { 
     // use b.SomeProperty   
    } 
    } 
+0

是不是混淆了通過整個參數Whene只需要一個或兩個參數? –

+0

@ anouar204對不起,沒有得到問題 –

+0

如果方法只需要來自類B的一小組參數不會混淆整個實例? –

1

沒有在主題方面的一個「良好做法」。

這是一種「超載」的方法(找不到確切的術語來定義這一點),保持其中一些是私人的。那是。

在這個具體的例子可以Methode2(string param)也從類的與來自b.SomeProperty參數不同的一些其它部分調用。

因此爲了避免雙重代碼,開發人員引入了新的方法Methode2(..)

+1

顯示的代碼沒有使用重載所有。方法名稱是不同的。 –

+0

@JonSkeet:對!將修復文本... – Tigran

+0

我們可以考慮代碼的可讀性是一個足夠的參數來使用參數,而不是實例變量? –