2012-02-10 5 views
5

からのEnumまたは静的プロパティを取得すると、なぜ私はenumプロパティまたはこの状況でtype<T>のいずれかのstaticプロパティにアクセスすることはできません。私は暗黙のうちに<T>typeBarであると宣言しています。ちょうどGenericsの制限か、enumtypeそのものであるかどうかを知りたがっています。だからジェネリックリファレンスタイプ<T>

​​

@Frederik Gheyselsの答えでは

を更新し、私がenumかのいずれかのstaticへのアクセス権を持っていないだけでBarから派生しclassを持っている場合と述べていますbaseこれは正しくない、これはコンパイルして動作します。

public class Foo : Bar 
{ 
    public Foo() 
    { 
     // This all works 
     var address = this.Address; 
     var car = Foo.Cars.Honda; 
     var name = Foo.Name; 
    } 
} 

public class Bar 
{ 
    public static string Name { get; set; } 
    public string Address { get; set; } 
    public enum Cars 
    { 
     Honda, 
     Toyota 
    } 
} 
+4

なぜあなたは*できたらいいですか?ここのユースケースは何ですか? –

+0

http://stackoverflow.com/questions/196661/calling-a-static-method-on-a-generic-type-parameterに似ています – AlG

+0

[this](http:// stackoverflow)と似たようなことを達成しようとしていますか? .com/questions/4704201/what-is-the-best-way-to-override-enums)? –

答えて

1

あなたCars列挙型は、クラスBar内部のネストされたタイプです。 Barのメンバープロパティ/メソッドではありません。 したがって、不可能です。

車は、バーのネストされたタイプです。 Barから派生した別のクラスを作成するときにBar2と呼び出すと、そのタイプは作成されないため、Bar2.Carsにアクセスすることはできません。ネストした型はインスタンスメンバではないため、継承されません。

+1

これはなぜこれが不可能であるのかという疑問にはあまり答えません。 –

+4

* *はBarのメンバーです - 型は一種のメンバーです。 –

+2

はい、ただしバー固有のものです。 Tの汎用パラメーターとして許可される継承型のBar型は、<継承型> .Cars型を持ちません。 –

1

潜在的な回避策は、Foo<T>Barから継承して静的メンバーを公開できるようにすることです。静的メンバーNameにアクセスするには、仮想アクセサーをdiscussed hereとして指定する必要があります。

public class Foo<T> : Bar where T : Bar 
{ 
    public Foo() 
    { 
     // This obviously works 
     var car = Bar.Cars.Honda; 
     var name = Bar.Name; 

     // use base class for enum accessor ? 
     var car2 = Foo<T>.Cars.Toyota; 
     var name2 = Foo<T>.Name; 

     default(T).Accessor = "test"; // static member access 
    } 
} 

public class Bar 
{ 
    public static string Name { get; set; } 
    public enum Cars { Honda, Toyota }; 
    public virtual string Accessor 
    { 
     get { return Name; } 
     set { Name = value; } 
    } 
} 
+0

しかし、 'Foo'は' Bar'ではないかもしれません。コレクション型のジェネリックを考えると、そうはならないでしょう。 –

関連する問題