2017-10-11 54 views
0

我已經創建了這樣的類。C#類函數返回類(性能)

public class SimpleClass 
{ 
    public string myProp { get; set; } 

    public SimpleClass() 
    { 
     this.myProp = ""; 
    } 

    public SimpleClass Method1() 
    { 
     this.myProp += "Method1"; 
     return this; 
    } 

    public SimpleClass Method2() 
    { 
     this.myProp += "Method2"; 
     return this; 
    } 

    public string GetProp() 
    { 
     return this.myProp; 
    } 
} 

我正在像這樣使用它。

public class Worker 
{ 
    public Worker() 
    { 
     string Output = new SimpleClass().Method1().Method2().GetProp(); 
    } 
} 

所有函數都返回容器類,最後一個方法返回結果。

我對這種表現很好奇,使用像表現或好的方法是不好的事情?

我應該這樣使用它還是可以建議另一種方法。

感謝

+5

從方法返回某些內容通常不會影響性能。你爲什麼會這樣想?你有沒有測量過性能問題?我會更專注於您在此刻編寫的代碼的澄清和語義,而不是微量優化毫秒的性能。 – David

+0

我剛開始使用它,我很困惑bcs我總是返回一個對象。在記憶中,它們作爲第一個實例的新對象或同一對象被保存? –

+0

它不會影響您的表現,但最好能夠增加它並隱藏最終用戶的複雜度 –

回答

0

一些建議: 應該怎麼知道用戶First Call的method1然後Method2終於GetProp()

封裝您的方法並隱藏所有複雜性更好。例如,用戶只需撥打GetProp()GetProp()即可實現您想要的功能。 您exmple可以改變象下面這樣:

public class SimpleClass 
{ 
    public string myProp { get; set; } 

    public SimpleClass() 
    { 
     this.myProp = ""; 
    } 

    private string Method1() 
    { 
     this.myProp += "Method1"; 
     return Method2(); 

    } 

    private string Method2() 
    { 
     return this.myProp += "Method2"; 

    } 

    public string GetProp() 
    { 
     Method1(); 
     return this.myProp; 
    } 
} 

最後打電話給你的道具()方法,如:

 SimpleClass simple = new SimpleClass(); 
    string Output = simple.GetProp(); 

而另一項建議能有更好的設計是讓你Mathod1Method2Private

+0

OP很可能寫了流利的API,流利的設計沒有錯,如果它的目的完成,它不會混淆。 –

+0

也爲什麼使Method1和2私人?爲什麼它更好的設計? –

+0

爲了這個工作,他們*不應該*是私人的。 (除非你正在做一些非標準的東西。) –

0

我認爲你是以錯誤的方式重新發明輪子。你可能正在尋找StringBuilder這完全一樣的東西。

var builder = new StringBuilder(); 
var result = builder.Append("something").Append("something else").ToString(); 

,但如果你還是希望有專門的類,以提供有意義的方法,而不是僅僅Append,還提供了一些抽象爭論上傳遞,你可以做到這一點。

public class SimpleClass 
{ 
    private readonly StringBuilder _builder = new StringBuilder(); 

    public SimpleClass Method1() 
    { 
     _builder.Append("Method1"); 
     return this; 
    } 

    public SimpleClass Method2() 
    { 
     _builder.Append("Method2"); 
     return this; 
    } 

    public string GetProp() 
    { 
     return _builder.ToString(); 
    } 
} 

請注意,使用StringBuilder是將字符串附加到一起的有效方式。對於少量的附加,它可能不會顯示差異,但對於大量的附加,它會更快並且產生更少的垃圾。