私は現在、整数パラメータを取るいくつかのメソッドを持つクラスを持っています。これらの整数は、アプリケーションが実行できる操作にマップされます。クラスのコンシューマが、その中のすべての操作で持つ列挙型を提供できるように、クラスを汎用的にしたいです。次に、その列挙型のパラメータがメソッドに渡されます。しかし、私はジェネリック型を全く指定することができないようにし、現行の方法から構文が変更されていない整数に戻すようにします。これは可能ですか?ジェネリックのためにどのようにデフォルトタイプを提供しますか?
答えて
:
var foo = new MyGenericClass(); // defaults to integer... this doesn't work
var bar = new MyGenericClass<MyEnum>(); // T is a MyEnum
本当にデフォルトの型ビーイングint型のimplicitnessを重視する場合は、静的な工場でそれを行う必要があるでしょう方法は、私はそれの価値が表示されません。
public class MyGenericClass<T>
{
public static MyGenericClass<T> Create()
{
return new MyGenericClass<T>();
}
public static MyGenericClass<int> CreateDefault()
{
return new MyGenericClass<int>();
}
}
実際に上記のような恩恵を受ける方法については、以下を参照してください。
var foo = MyGenericClass<MyEnum>.Create();
var bar1 = MyGenericClass.CreateDefault(); // doesn't work
var bar2 = MyGenericClass<int>.CreateDefault(); // works, but what's the point
あなたも遠くそれを取るしたい場合は、この問題を解決します静的なファクトリクラスを作成することができますが、デフォルトを提供するよりも、他の理由のためにそれをやっている場合には、さらに多くのばかげソリューションですタイプ:
public static class MyGenericClassFactory
{
public static MyGenericClass<T> Create<T>()
{
return new MyGenericClass<T>();
}
public static MyGenericClass<int> Create()
{
return new MyGenericClass<int>();
}
}
var foo = MyGenericClassFactory.Create(); // now we have an int definition
var bar = MyGenericClassFactory.Create<MyEnum>();
ええ、私はその複雑さを紹介したくありません。デフォルトはあまり重要ではない、ちょうど良いだろう。私はdidn '私はそれをする方法を知っていますが、私は皆さんが最初に確認することを確認したかったのです。答えをありがとう –
コンパイラは、渡された引数の型に基づいて方法ほとんどの時間を上型引数を推論することができます
public void DoSomething<T>(T test) {
}
はところで
DoSomething(4); // = DoSomething<int>(4);
DoSomething(MyEnum.SomeValue); // = DoSomething<MyEnum>(MyEnum.SomeValue);
で呼び出すことができ、ジェネリックメソッドのジェネリックでないオーバーロードを持つこともできます。
私は、クラスを「オプションで汎用」にしたいと考えています。私はそれが可能だとは思わないので、ジェネリックでないオーバーロードでジェネリックメソッドを作成する必要があります...私はこの "SecurityContext sec = new SecurityContext();"を探していました。 (これはパラメータ用の整数を使用して作成し、次に "SecurityContext
元のバージョン(非汎用バージョン)を保存し、汎用バージョンを作成します。
非汎用バージョンから汎用バージョンを呼び出します。
void Main()
{
DoSomething(2);
DoSomething(EnumValue);
}
public void DoSomething(int test) {
DoSomething<int>(test);
}
// Define other methods and classes here
public void DoSomething<T>(T test) {
Console.WriteLine(test);
}
汎用パラメータ型はすべてのメソッドで同じです私はクラスレベルでそれをしたいと思います。私はジェネリック版を作ってからそれをintバージョン用に継承することができると知っていますが、私はそれをすべて一つにすることを望んでいました...しかし、 –
だから...単純な継承を使用してみませんか?同様に:あなたは両方の方法を書くことができます
class MyGenericClass<T>
{
}
class MyGenericClass : MyGenericClass<int>
{
}
この方法:
var X = new MyGenericClass<string>();
var Y = new MyGenericClass(); // Is now MyGenericClass<int>
- 1. アドバイスメソッドにポイントカットバインドアノテーションをどのように提供しますか?
- 2. リストアからディレクトリリストをどのように提供しますか?
- 3. ionic2どのように/ @ Ina OpaqueTokenを提供しますか?
- 4. Azureはどのようにスケーリングを提供しますか?
- 5. ファイルをどのように提供しますか?
- 6. Polymer Webアプリケーションはどのように提供しますか?
- 7. JSONをAngularでどのように提供できますか?
- 8. index.jadeはどのように提供できますか?
- 9. google-dataflowのテンプレートにランタイム入力をどのように提供しますか?
- 10. プレイブックからのファイルの役割をどのように提供しますか?
- 11. どのようにしてデフォルトのデバッグ実装を提供しますか?
- 12. Dagger2にどのようにGoogleApiClient依存関係を提供しますか?
- 13. webpackにカスタムモジュール/ローダ解決ロジックをどのように提供しますか?
- 14. SAMLは実際にどのようにセキュリティを提供していますか?
- 15. デーモンやサービスにどのように暗号化キーを提供しますか?
- 16. AppengineサーブレットからGoogleクラウドストレージファイルをどのように提供しますか?
- 17. Socket.ioはnonsocket.ioのURLのために404を提供します
- 18. 書込みコレクションのコピーはスレッドセーフティをどのように提供しますか?
- 19. ローカルのDjango環境でメディアファイルをどのように提供しますか?
- 20. カスタムループバック検証で動的メッセージをどのように提供しますか?
- 21. Facebookはアプリケーションにどのような機能を提供していますか?
- 22. バンドルのインストール--binstubsは私たちのために何を提供しますか?
- 23. は、クラウド機能のために提供
- 24. スプリングセキュリティ - どのように傍受URLのリストを提供する
- 25. スプリングブートから静的HTMLをどのように提供できますか?
- 26. 角度変換のためのフォールバックスタティックファイルを提供するにはどうすればよいですか?
- 27. 別のポートでIonicアプリをどのように提供できますか?
- 28. Expressフレームワークまたはnode.jsは自動的にjavascriptファイルをどのように提供しますか?
- 29. 認可ルーチンによって提供されたVSTS OAuth2ベアラートークンはどのように使用しますか?
- 30. リリース前にモバイルアプリをどのように提供するのですか?
はVilx-ソリューション@良いアプローチとより良い答えではありませんか? –