2012-02-28 6 views
0
class constType 
{ 
    public static const Type messageType = typeof(int); // HOW TO DO THIS? 1st mark 

    public string[] GetArraySomehow() 
    { 
     return new string[sizeof(messageType)]; // HOW TO DO THIS? 2nd mark 
    } 
} 

class testTypeInClass 
{ 
    public void test(constType.messageType message) // HOW TO DO THIS? 3rd mark 
    { 

    } 
} 

これは本当に奇妙で奇妙なことですが、どうすればいいですか?型を変数として格納し、パラメータの型で使用する方法は?

  • 第一マーク:私はのconst変数としてint型の型を格納し、それが
  • 第二マークをlaterç使用する必要があります:私は(それが等しくない何バイト?)保存されたタイプのサイズを取得する必要があります
  • 第3マーク:私はそれをパラメータタイプとして使用する必要があります。

まあ、私はこのようなことをしなければならない理由:

私はタイプ(そう広くない、ちょうど私が私がint8,16,32などを使用します知っている)を格納する必要が と知っている必要があります正確に何バイトそれ等(1,2,4など..);このような

public int fixForSwitchStatement(byte[] messageIndex) 
    { 
     byte[] RValue = new byte[4]; 

     for (int i = 0; i <= messageIndex.Length - 1; i++) 
     { 
      RValue[i] = messageIndex[i]; 
     } 
     for (int i = messageIndex.Length; i <= 4 - messageIndex.Length - 1; i++) 
     { 
      RValue[i] = 0; 
     } 

     return BitConverter.ToInt32(RValue, 0); 
    } 
public string test (int messageIndex) 
    { 
     switch (messageIndex) 
     { 
      case 0: 
       return "etc.. etc.."; 
      case 1231412: 
       return "whatever"; 
     } 
    } 

は、まず私はこのようないくつかのメソッドを持っていたすべての

も最初私は、switchステートメントを使用して、私のクラスのいずれかにおける方法とがあります

私はbyteまたはshortをswitch文に渡してから、int(intは指定された型です)に変換していました。このような再設計をしたかったのです。

public string test (/* [what's the case limit? that I've determined?] */ messageIndex) 
    { 
     switch (messageIndex) 
     { 
      case 0: 
       return "etc.. etc.."; 
      case 1231412: 
       return "whatever"; 
     } 
    } 

私はもうfixSwitch ...メソッドを使用したくないためです。私はこれらのすべてのコンセプトのために特定のタイプが必要です。

なぜ(int)somethingByteのような型キャストの代わりにfixSwitchを使用する必要がありますか?

私のクラスの中には、messageSizeというものがあります。それは、messageIndexの最大サイズを宣言する必要があります。これは私のサーバークライアントプロジェクトです。要求インデックスとして使用されているmessageIndexというものがあります。そして私はそれをバイトで制限しています。接続からいくつかのデータスペースを節約する。

// still is being written 
+0

実際の使用例は?私はそれよりも良い方法を提供できると確信しています。 – ken2k

+0

C言語のにおい:)ここで何を達成しようとしていますか? – Tigran

+0

私はCのbtwを知っていない、これは私の第二言語です(1stはVB.NETでした)。なぜこのようなことが必要なのか説明するのは難しいですが、私は説明する途中です。 – haxxoromer

答えて

1

私は目標が何であるか分かりませんし、その間に質問が編集されていますが、さらに参考になるジェネリックを使用したサンプルコードがあります。

class constType<T> where T : struct 
{ 
    public T GetT() 
    { 
     return new T(); 
    } 

    public string[] GetArraySomehow() 
    { 
     var len = Marshal.SizeOf(typeof(T)); 
     return new string[len]; 
    } 
} 

class testTypeInClass 
{ 
    public void test<T>(T message) where T : struct 
    { 

    } 
} 

class MyClass 
{ 
    void Test() 
    { 
     var constType = new constType<int>(); 

     var typeInClass = new testTypeInClass(); 

     var t = constType.GetT(); 

     typeInClass.test(t); 

    } 
} 
+0

まずは投稿してくれてありがとう、とにかくジェネリック医がこれをやるつもりです。 – haxxoromer