2015-01-08 18 views
6

(ad-hoc)型を指定せずにジェネリッククラスの定数にアクセスするための構文トリックはありますか?静的変数についての注意点はあり一般的な.NETクラスのpublic static(const)

public class MyClass<T>{ 
    public const string MyConstant = "fortytwo"; 
} 

// I try to avoid this type specification. 
var doeswork = MyClass<object>.MyConstant; 

// Syntax similar to what I'd like to accomplish. 
var doesnotwork = MyClass.MyConstant; 

MyClass<object>MyClass<int>のような異なるタイプの(一定の)共有されていないが、私の質問は、可能な利用可能な構文のトリックについてです。

+2

。 – Dirk

+1

警告:パブリッククラスで 'const'を使用すると、**アセンブリが別のプログラムまたはアセンブリで参照される場合に頭痛を引き起こす可能性があります。代わりに 'readonly'を使用してください。 – B0Andrew

+3

ここには、[参照](http://www.stum.de/2009/01/14/const-strings-a-very-convenient-way-to-shoot-yourself-in-the-foot/)の@ B0Andrewの警告 – stuartd

答えて

10

非一般抽象的な親クラスを使用してください。

public abstract class MyClass 
{ 
    public const string MyConstant = "fortytwo"; 
} 

public class MyClass<T> : MyClass 
{ 
    // stuff 
} 

var doeswork = MyClass.MyConstant; 

もちろん、一般的なクラスの一部であることを、いくつかの理由があることを一定のニーズを想定していること。それが公共のアクセシビリティを持っているならば、私は別のクラスに入れるだけではない理由を見ません。

の場合は、汎用的ではない抽象的な親クラスを持つことをお勧めします。汎用クラスです。ジェネリッククラスは、実際には親クラスではなく、特定のサブタイプクラスのテンプレートなので、非正規ジェネリック親クラスでは、いくつかの手法(これに限定されませんが、これに限定されません)を簡単に行うことができます。このような

+0

私にそれを打つ。 :) –

+0

@MatthewWatsonうん、おそらく* 30秒。 :p –

+0

私は答えとしてこれをチェックした理由は、それは非常に短く(読める)、私の問題を解決したということでした。努力と時間を費やして@MatthewWatsonへの誇り。 – LosManos

5

何かが動作します:

using System; 

namespace Demo 
{ 
    public class MyClass // Use a non-generic base class for the non-generic bits. 
    { 
     public const string MyConstant = "fortytwo"; 

     public static string MyString() 
     { 
      return MyConstant; 
     } 
    } 

    public class MyClass<T>: MyClass // Derive the generic class 
    {        // from the non-generic one. 
     public void Test(T item) 
     { 
      Console.WriteLine(MyConstant); 
      Console.WriteLine(item); 
     } 
    } 

    public static class Program 
    { 
     private static void Main() 
     { 
      Console.WriteLine(MyClass.MyConstant); 
      Console.WriteLine(MyClass.MyString()); 
     } 
    } 
} 

このアプローチでは、typeパラメータに依存しない提供したい任意の静的な型または値のために動作します。静的メソッドでも動作します。

(注意:あなたは、誰もが基本クラスをインスタンス化したくない場合は、それを抽象します。)あなたは非ジェネリッククラス `定数のMyClass`を作成することができ

関連する問題