2017-10-11 2 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(); 
    } 
} 

すべての関数はコンテナクラスを返し、最後のメソッドはresultを返します。

私はこのパフォーマンスが不思議ですが、パフォーマンスや良いのような方法を使用するのは悪いですか?

私はそれをそのように使うべきですか、別の方法でsuggesstできますか?

おかげ

+5

メソッドから何かを返すことは、一般にパフォーマンスに影響しません。なぜあなたはそれがどうだろうと思いますか?パフォーマンスの問題を測定しましたか?私は、この時点で書いているコードの明確化とセマンティクスに、ミリ秒のパフォーマンスをマイクロ・オプティマイズするよりも重視しています。 – David

+0

私はちょうどそれを使用し始めた、私はbcsを混乱させ、私は常にオブジェクトを返します。メモリ上では、最初のインスタンスとして新しいオブジェクトまたは同じオブジェクトとして保持されますか? –

+0

あなたのパフォーマンスには影響しませんが、エンコードしてエンドユーザの複雑さを隠す方が良い –

答えて

0

いくつかの提案:その後、 どのようにユーザーが知っておくべきファースト・コールmethod1Method2、最終的に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(); 

、別の提案あなたのMathod1PrivateとしてMethod2を確認しています。

+0

OPはFluent 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を使用すると、文字列を追加する効率的な方法です。少数の追加では違いが見られないかもしれませんが、追加回数が多いと処理が速くなり、ゴミも少なくなります。

関連する問題