• ベストアンサー

VB.NETでテンプレート関数・クラス

VB.NET(.NET2.0ベース)でテンプレートを用いてクラスや関数を定義したいのですが、方法が分かりません。検索してもC#やC++ばかり出てきます。 C#が出てくるのだから、VBでも…と思いましたが、CILに展開される際、型毎に多重宣言でもしているんでしょうか? とりあえず、VB.NETでテンプレートの使い方をご教示頂ければ幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmryk
  • ベストアンサー率100% (1/1)
回答No.1

C++ での テンプレートはVB.NETやC#ではジェネリックと呼ばれているものではなかったでしょうか? MSDN C++テンプレートとC#ジェネリックの違い http://msdn.microsoft.com/ja-jp/library/c6cyy67b(v=vs.80).aspx ジェネリックなクラスはList(Of T)のように、インスタンス時に、型を決定します。 クラスの作り方ですが、とりあえず下記のような記述方法です。 Public Class Test(Of T)   Public hoge As T      Public Sub Show(ByVal val As T)     Console.WriteLine("hoge:" + hoge.ToString())     Console.WriteLine(" val:" + val.ToString())   End Sub End Class この場合、インスタンス時に New Test(Of String) とすると、TはString型となり、 New Test(Of Integer) とすると、TはInteger型となります。 詳しい使用方法はMSDNでジェネリックを検索したり、 Googleで「VB.NET ジェネリック クラス」などと検索すると出てくると思います。 ------------------------------------------------------------------------------ 色々と勘違いしていたらすみません。

参考URL:
http://msdn.microsoft.com/ja-jp/library/w256ka79.aspx
sumire_kanou
質問者

お礼

ありがとうございます。ジェネリックという単語が出てきていませんでした(http://is.gd/korddb)。コードのサンプルも大変参考になりました。

関連するQ&A

  • templateクラスの宣言と定義を、別々のファイルに分けたい

    こんばんは。 templateを利用したクラスについての質問です。 通常、テンプレートクラスのメンバ関数は、その定義部分をインライン展開するべき、とのことですが… なんとかして宣言部と定義部を別々のファイルに分ける事は出来ないでしょうか? テンプレート変数をクラス内で共有したいため、テンプレート関数ではなく、テンプレートクラスで上記の事を実現したいのです。 「コンパイラによっては、インライン関数でなければならない」という記述を見かけたので、 コンパイラによってはインライン関数でなくても構わないのでしょうか? 開発環境は WindowsXP-SP2 VisualStudio2005-SP1 C++コンソールアプリケーションです。

  • .netでの、VBと比べてのC++の優位性について教えてください

    最近C++6を勉強する機会があり、自由に使えるほどでは有りませんが、C++6の世界に若干浸りました。 その際に、VB6などと比べて細かいことができるということで、C++の優位性を教えてもらったわけですが、 現在の .net になってからコンパイラによって、VB.netでもVC++.netでも「CIL」に変換されると思います。 その場合は、VB6 対 VC++6で言われていたような細かいことというのは、そのまま引き続いているのでしょうか。 それとも、CILになることによって、細かいことというのは隠蔽されてしまい、VB.netでも、VC++.netでも同じものになってしまうのでしょうか。 ※なんて表現していいのかわからないので「細かい」というあいまいな表現になってしまって申し訳ありません。 その関係の参考になるurlなどを教えていただけると幸いです。 よろしくお願いします。

  • C++のテンプレート関数やテンプレートクラスをC#で利用するには?

    C++で作成したテンプレート関数やテンプレートクラス をC#で利用したいと考えております。 テンプレート関数やクラスを明示的実体化してコンパイルし、 C++/CLIでラップすればC#でも使えるという話を聞きました。 テンプレートでない通常の関数やクラスの場合は、 http://www.atmarkit.co.jp/fdotnet/special/vcppinvista01/vcppinvista01_01.html で紹介されているのを見つけたのですが、 テンプレート関数やクラスの場合 具体的にC++/CLI側でどのように記述すればよいか分かりません。 例えば、 ---- [test.h] template <class Type1> class Test{ public:   Type1 x;   template <class Type2>   Type1 func(Type2 y){ ... } }; ----- のようなクラスがあった場合、どうすればよいでしょうか。 明示的な実体化の方法とC++/CLIで明示的実体化した関数やクラスが どのような名前になるのかが分かれば上記サイトの方法で いけるのではないかと思っているのですが…。 環境はVisual Studio2005(or 2008)です。 よろしくお願いいたします。

  • VB.netでクラスにデータが渡せない

    現在、C#で作られたソースをDLL化して、VB.netでプログラムを 作っているのですが、C#側のクラスにVB.netで値を渡し、関数を 動かそうとすると、Nullのエラーが発生してしまいます。 C#のサンプルプログラム通りに、値を渡しているのですが。 ちなみに、Amazon MWSプログラムです。

  • VB.NETのモジュールで定義した関数のように、どこからでも呼び出せる 関数は、C#でどのように記述するのでしょうか?

    C#2005で、どこからでも呼べる関数ができないか悩んでいます。 昔、関数のプログラムを作っていた頃から、進歩せず オブジェクト思考的なプログラミングが苦手で、 エラー 名前 '***関数名***' は現在のコンテキスト内に存在しません。 というエラーがたくさん出て、苦しんでおります。 VB.NETのモジュールで定義した関数のように、どこからでも呼び出せる 関数は、C#でどのように記述するのでしょうか? クラスが基本という方針はわかりますが、まず手がかりが欲しいです。

  • クラスの関数へユーザー定義型の引数を渡す(VB6.0)

    お世話になります。 クラスモジュール内へ宣言した関数へユーザー定義型(標準モジュール内でPublicで宣言)の引数を渡すとコンパイルエラーとなってしまいます。 ユーザー定義型を宣言した以外の標準モジュールでは同じ関数は動きますが、Formモジュールでは動きません。 標準モジュールにしかユーザー定義型の引数を渡すことは出来ないのでしょうか??

  • テンプレートクラスのフレンド関数の宣言

    テンプレートクラスに対して、operator << を定義しようとしてハマってしまったので。 ---- 最終的にできたコードはこんな感じ ---- template<size_t M> class MyContainer; template<size_t N> std::ostream& operator<<( std::ostream& os, MyContainer<N> const& cont ); template<size_t M> class MyContainer {  friend   ostream& operator<< <M>( ostream& , MyContainer<M> const& ); <= ここで「operator<<」としてハマった  public:   MyContainer() { }  private:   void Print_( std::ostream& os ) const {    copy( content_, content_ + M, ostream_iterator<int>( os, "\n" ) );   }  private:   int content_[M]; }; template<size_t N> ostream& operator <<( ostream& os, MyContainer<N> const& cont ) {  cont.Print_( os );  return os; } ------------------------------ テンプレートクラスのfriend関数を宣言する場合に、関数に明示的にテンプレート引数を与えないとテンプレート関数の特殊化だけが friend となるようです。 そういうもんだと言ってしまえばそれまでですが、何故こんな変態的な仕様になってるんでしょう? 特殊化された関数だけをテンプレートクラスのfriend に指定したいような状況が想像できません。

  • C#のクラスをVB.netで使用したい!

    お世話になっております。 C#で、wave音声ファイルを録音する機能を持ったクラスファイルがあります。 これをvb.netで使用したいのですが、使用方法がよくわかりません。 vb.netで「既存項目の追加」で、C#のcsファイルは追加できたのですが、 これをvb.netのモジュールで宣言して使用する方法を教えていただきたいのです。 検索してもうまくヒットせず、こちらで教えていただきたく ご質問させていただきました。 【環境】 ・windows mobile 5.0 pocketPC用プログラム(.net compact frame3.5) よろしくお願いいたします。

  • VB 関数

    初めまして。 VB初心者なので,簡単な質問なのかしれませんが御願いします。 C言語で,   int      main        (void) 戻り値の型    関数名      戻り値なし と書きますが,これと同じ意味を持つプログラムをVBで書くとどのようになりますか? 関数の作り方がまだわかってないので教えていただけますか? 宜しく御願いします。 

  • VB 提供されているクラスの使い方は?

    VB初心者です。 提供クラスを利用する宣言方法を教えて頂けませんでしょうか? ■背景 提供されているクラスを利用したく、調べているとそのクラスそのものの使い方は、沢山出て来るのですが、そのクラスを宣言する?方法が判らないためビルドエラーになってしまいます。 しかし、提供クラスを利用する前宣言の方法を調べても出て来ないのです。 例えば・・・ https://dobon.net/vb/dotnet/form/folderdialog.html 'FolderBrowserDialogクラスのインスタンスを作成 Dim fbd As New FolderBrowserDialog ここでエラーとなってしまいます。 FolderBrowserDialogクラスの宣言方法が何処を調べても出て来ないのです。 アドバイスの程宜しくお願い申し上げます。

専門家に質問してみよう