2011-07-22 8 views
4

私の質問は、別の変数(とどのような型のもの)に静的なクラスを割り当てることができるかどうかです。静的クラスを変数に割り当てることはできますか?

は私が

public static class AClassWithALongNameIDontWantTotType{ 
    public static bool methodA() { stuff } 
} 

を持っているし、私はclass Bの内側に、私はのように、短い名前で何かにこのクラスを再割り当てすることができるように

class B{ 

} 

が、私はそれを作ることができる持っていると言います

SomeType a = AClassWithALongNameIDontWantTotType 

a.methodA() 

私は

Func<bool> a = AClassWithALongNameIDontWantTotType.methodA() 

ような何かをすることによって機能を得ることができますが、私はクラス全体を持っていることを好むだろう。

ありがとうございます!

+0

を使用することができ、ほんの始まり、その後、タブ;)。 –

+0

ええ、私はそれを使用していますが、コードを短縮する方法があれば、コードに長い名前が散らばっていないときにも好きです:P Looks cleaner! – rafalio

答えて

9

あなたは長い名前を入力して回避する目的のために純粋にこれをしたい場合は、あなたがインテリセンスを使用している場合は、全体の名前を入力する必要はありませんエイリアス

using a = SomeNamespace.AClassWithALongNameIDontWantToType; 
+0

ありがとう!ちょうど私が欲しかったもの:P – rafalio

3

いいえ、静的クラスのインスタンスを持つことはできません。リフレクションやダイナミックで探しているものを達成することができます。これを行うには、私は助けるためにDynamicObjectを作成:

class StaticMethodProvider : DynamicObject 
{ 
    private Type ToWorkWith { get; set; } 

    public StaticMethodProvider(Type toWorkWith) 
    { 
     ToWorkWith = toWorkWith; 
    } 

    public override bool TryInvokeMember(InvokeMemberBinder binder, 
     object[] args, out object result) 
    { 
     result = ToWorkWith.InvokeMember(binder.Name, BindingFlags.InvokeMethod, 
      null, null, null); 
     return true; 
    } 
} 

をし、その後、あなたは

dynamic a = new StaticMethodProvider(
    typeof(AClassWithALongNameIDontWantTotType)); 
Console.WriteLine(a.methodA()); 

を行うことができると思います。しかし、あなたはインテリセンスを持っていると時間の安全性をコンパイルしないでしょう。それはおそらく過剰な過ちです。

関連する問題