2017-03-17 9 views
0

メソッドを呼び出す構造体を作成したいと思います。このメソッドのパラメータは、インスタンス化されたクラスからのみ使用できるようにしてください。C#のメソッド呼び出しのコンセプト(パターン?)

私は正確に...何を意味、私は次のような機能が含まれているクラスがあります。

public class Functions 
{ 
     public Request GetId(int item) 
     { 
      //return instanced request 
     } 

     public Request SetId(int item) 
     { 
      //return instanced request 
     } 
} 

私は呼び出し(リクエスト要求)と呼ばれる方法を、持っている呼び出し元のクラスを、持っています。

このメソッドのパラメータとしてFunctionsクラスを使用したいと思いますが、受け入れられたパラメータはこのクラスからのみ取得できます。

実は私はInvokeメソッドのクラス内の関数のクラスからインスタンスを作成するには、この操作を行うと、次のようになります。

Functions Requests = new Functions(); 

...ので、私は、Invokeメソッドを呼び出したいとき、それ次のようになります。

Invoke(Requests.GetId(1)); 

しかし、解決する方法は、私が唯一のように、インスタンス化クラスからの要求を呼び出すことができるということ、あります:

Invoke(GetId(1)); 

多分私は間違った方法で考えているかもしれないが、うまくいけば、私が到達したいことは明らかです。 (Invokerクラスからの独立した関数ですが、それらの間の関係は維持してください)。

ありがとうございました!

+0

私はあなたが[SOLID](https://en.wikipedia.org/wiki/SOLID_(オブジェクト-oriented_design))上に読むべきだと思います特に単一責任パターン。 C#でクラスを作成するときは、そのクラスの名前をすぐに自分が何をしているのかを認識できるようにする必要があります。したがって、 'Functions'クラスを呼び出すことは、一般名であるので悪い名前です。 'RequestModifiers'のようなものを呼び出すことは近づいていますが、まだ良くはありませんが、クラスが何を意味するのか分かりません。そして、あなたは意図を隠している他のメソッドからメソッドを呼び出す必要があります –

答えて

0

クラスとメソッドstatic

public static class Functions 
{ 
     public static Request GetId(int item) 
     { 
      //return instanced request 
     } 

     public static Request SetId(int item) 
     { 
      //return instanced request 
     } 
} 

、その後

using static Functions;

あなたは、このシンテックスを使用することができます作成​​しない理由:

Invoke(GetId(1));

しかし、これは良い習慣ではありません。

+0

統計情報を導入することによって、コードをテストして維持することが難しくなります。 –

+0

@CallumLinington質問は、この 'Invoke(GetId(1));' 。この問題は、 "テストとメンテナンス"が問題ではない、何か変わったものです。 –

+0

あなたは「クラスとメソッドを静的にして、なぜ議論のために質問してみてはどうですか?私はあなたがなぜこれをしないのかと答えました。あなたは悪いアドバイスをしたときにあなたを助けていません。 –

0

Commandパターンを使用すると、このような場合のために見ることができるものです。https://en.wikipedia.org/wiki/Command_pattern

+1

URLを外部リソースに置くのではなく、ここであなたの答えに適切な部分をコピーしてください。それがなければ、この答えは、「答えではない」、「コメントのように見える」、または「答えのみをリンクする」のいずれかであり、この答えの削除につながる可能性があります。 –

関連する問題