• ベストアンサー

Action<T>ってなんですか?

一応いろいろなサイトを見て Action<string> x; x=Console.Write; x("test"); というような使い方はわかったのですがデリゲートというのは多態性を実現するひとつの方法 ととらえてよいでしょうか。 またSystem.Windows.Formsで定義されてていると聞いたのですがmsdnでSystem.Windows.Forms を調べてもAction<T>の宣言らしきものが見当たりません。 ついでにc#において<>演算子で囲む意味と、Tがなんの略語なのかも疑問です。 よろしくおねがいします。

関連するQ&A

  • C#の変数の範囲

    C#の変数の範囲 質問させてください。 以下は、ネットに掲載されていたC#の問題です。 ~ここから~ 下記のC#のコードを実行した場合、"Hello World!"と二行表示されます。 using System; class Program { static void Main(string[] args) { string s = "Hello"; Action a = () => Console.WriteLine(s); s += " World!"; a(); Console.WriteLine(s); } これを一行目だけ"Hello"と表示される場合、 Action a = () => Console.WriteLine(s);をどう書き換えればよいでしょうか。 1. Action a = () => Console.WriteLine("Hello!"); 2. Action<string> a = (s) => Console.WriteLine(s); 3. Action a = () => Console.WriteLine(t - " World!"); 4. string t = s; Action a = () => Console.WriteLine(t); 5. Action a = () => { string t = s; Console.WriteLine(t); }; ~ここまで~ 正解は4だそうですが、「何故」そうなるかがわかりません。 汗 私としては、1.4.も題意を満たす気がするのですが・・・。 お知恵をお貸しください。 出展 http://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_07/extremecs_07_10.html

  • c# イベント用デリゲートの引数

     こんにちは。c#初心者です。  今回はイベントに用いるためのデリゲートの引数に関する質問です。  通常、「System.Windows.Forms.Control」のイベントで用いられているデリゲートの引数は全て  void SampleHandler(object sender, SampleEventArgs e)  のようになっていますが、コントロール以外のクラス(System.Windows.Forms.Controlから派生しないクラス)、例えばコレクションクラスのようなものでも同じように「EventHandler<T>」デリゲートを使わなければならないのでしょうか?  それともう一つ質問です。コントロールクラスでのイベントの引数は  SampleHandler(object sender, …  のようにせずに  SampleHandler(SampleControl sender, …   としてはいけないのでしょうか? (いけないと思いますが…)  質問は以上の2点です。どなたか詳しい方がいらっしゃいましたら教えていただけませんか?

  • C#における++演算子のオーバーロードについて

    はじめまして。 いろいろ調べてみたのですが、わからなかったので、質問させてください。 C#における++演算子のオーバーロードについてなのですが、 まずは、以下のコードをご覧ください。 ================================================================ using System; class Test { private int Num; public Test(int x) { this.Num = x; } public static Test operator ++(Test t) { Test result = new Test(t.Num + 1); return result; } public override string ToString() { return this.Num.ToString(); } } class TestDemo { public static void Main() { Test t = new Test(0); Console.Write(t++ + "\n"); Console.Write(t + "\n"); Console.Write(++t + "\n"); Console.Write(t + "\n"); } } ================================================================ 実行結果 0 1 2 2 ================================================================ ++演算子のオーバーロード関数の実装が一つなのに 前置インクリメントと後置インクリメントが適切に行われています。 二つのインクリメントが行われるときに同じメソッドが 呼び出されていると思うのですが、同一の実装で、振る舞いが 異なるのは、なぜなのでしょうか?どのようなカラクリで 実行されているのでしょうか?全くわかりません。どなたか 教えてください。よろしくお願いします。

  • C#で、デリゲートからその関数の名前を取得する方法

    次のコードを見てください。コメントにあるように デリゲートを引数とする関数内部で、そのデリゲートが受け取った関数の関数自身の名前を取得しようとしています。どうすればいいでしょうか? using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace ラムダ式 { public partial class Form1 : Form { public Form1() { InitializeComponent(); //引数aとbの初期値 this.textBoxA.Text = "10"; this.textBoxB.Text = "5"; } //int型を返し(I)int型2つを引数にする関数のデリゲート public delegate int I_II(int a, int b); public static int 足し算(int a, int b) { return a + b; } public static int 引き算(int a, int b) { return a - b; } public static int 掛け算(int a, int b) { return a * b; } public string 二項演算(I_II 演算方法) { //ここでは、演算方法.tostring()を使って"足し算" や"引き算"などの //関数名を得ようとしているが。この方法だと,デリゲートの名前 //すなわち I_II が帰ってきてしまう //どうすれば デリゲートが参照している関数名 ”足し算”や"引き算など" //を得ることができますか? string 関数名 = 演算方法.ToString(); return 関数名 + ": " + 演算方法(int.Parse(textBoxA.Text), int.Parse(textBoxA.Text)).ToString() + "\r\n"; } private void button1_Click(object sender, EventArgs e) { textBox結果表示.Text = ""; textBox結果表示.Text += 二項演算(足し算); textBox結果表示.Text += 二項演算(引き算); textBox結果表示.Text += 二項演算(掛け算); } } }

  • C# OpenFileDialogの制御方法

    こんにちは。 OpenFileDialogを利用し、ユーザーにファイルを選択させたいと思っています。そこまでは問題なくできるのですが、ユーザーにファイル選択のみさせたいと思っています。 OpenFileDialog上でファイルを作成できたり、特にファイルを誤って削除できないようにさせたいと思っています。 下記のURLは見たのですが、実現するプロパティが無いように思えます。 https://msdn.microsoft.com/ja-jp/library/system.windows.forms.openfiledialog%28v=vs.110%29.aspx 何か実現させる方法はあるでしょうか?よろしくお願いします。

  • バルーンのアイコンをカスタマイズするには?

    Windowsのバルーンチップ(※)について質問です。 ※.Netライブラリ:System.Windows.Forms.Notifyicon バルーン内のアイコンをGoogleアップデータのようにオリジナルのものにしたいのですがその方法がわかりません。 MSDNにはWindows標準のアイコンを指定する方法しか載っておらず困っています。 どうすればGoogleアップデータのようにオリジナルのものにできるのでしょうか? ■開発環境 Microsoft Visual Basic 2005 Express Edition ■MSDN>System.Windows.Forms.Notifyicon http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.notifyicon(VS.80).aspx ■バルーン事例 http://www.dworkers.com/dss/p/faqdoc/001/

  • VB.NETのデリゲートについて

    VB.NETのデリゲートについて質問です。 以下のプログラムなのですが、 デリゲート型をインスタンス化しているところで、コンストラクタにパラメータを渡していますが、 そのコンストラクタはどこに定義されているのでしょうか。 (AddressOf t1.Ohayou)というパラメータが渡されていますが、このパラメータを受け取っているコンストラクタがどれなのかが分かりません。 ご教示よろしくお願いいたします。 Delegate Sub Myprint(ByVal s As String) Module Module1 Sub Main() Dim t1 As Test1 = New Test1() Dim t2 As TEst2 = New Test2() Dim d As Myprint = New Myprint(AddressOf t1.Ohayou) d.Invoke("VB太郎") d = New Myprint(AddressOf t2.Konbanwa) d.Invoke("VB太郎") End Sub End Module Class Test1 Sub Ohayou(ByVal s As String) Console.WriteLine("おはようございます。{0}です。", s) End Sub End Class Class Test2 Sub Konbanwa(ByVal s As String) Console.WriteLine("こんばんわ。{0}です。", s) End Sub End Class

  • 入門サイトのサンプルプログラムがビルド出来ません

    こちらのサイトの http://www5b.biglobe.ne.jp/~suugaku/vc++kougi/kiso/dai1koudai7wa.html サンプルを作成してビルドしてみたのですが、 error C2248: 'System::Windows::Forms::Control::x' : private メンバ (クラス 'System::Windows::Forms::Control' で宣言されている) にアクセスできません。 'System::Windows::Forms::Control::x' の宣言を確認してください。 といったエラーがたくさん(100以上)出てビルドできません。 コピペなので入力誤りはないと思うのですが、何がいけないのでしょうか?

  • C++でのstringクラスの内部の挙動

    最近C++でクラスを理解し始めて疑問に思ったことなんですが。 string A = "abcdef"; という風に直感的にstringに文字列を代入出来ていたので何の疑問も持たず使っていたんですが、これをどのように実現しているか内部の挙動がよくわかりません。 srtcopyはやり方は面倒臭いですがこっちは単純に関数に値を渡しているだけなので理解出来ます。 内部で=演算子のオーバーロードをしているんじゃないかと思って、=演算子をオーバーロドした自分で作ったクラスでテストしてみたんですが Testclass A; A = "abcdef"; は可能ですが、stringの例のように変数宣言と同時に代入する Testclass A = "abcdef" としてみると、Testclass型への変換が出来ませんとなって、string型と同じ事が出来ません。 stringクラスの中でどのようにクラス宣言直後の代入をしているか教えてください

  • C#のnull許容の警告について

    「Visual Studio」のNET6.0の環境でコードを書いています。 static string UserName; という変数の宣言に対して 「null非許容のフィールドUserNameには、コンストラクターの終了時にnull以外の値が入っていなければなりません。フィールドをNULL許容として宣言することをご検討ください。」 という警告を回避するために static string? UserName; というnull条件演算子で対応したのですが、上司に 「トリッキーな方法(?)ではなく、初期化や代入を使え」 と言われてしまい static string UserName = null ; という書き方を試したのですが 「nullリテラルをnull非許容参照型に変換できません」 という警告が出てしまい、警告を出さない書き方が分からず困っている状態です。 どなたか修正方法を教えて頂けないでしょうか? 【ソースコード】 static class Program { static string UserName; static void Name() { Console.WriteLine("ユーザ名を入力してください"); string? enterName = Console.ReadLine(); Console.WriteLine("ユーザ名を入力してください: {0}", enterName); UserName = enterName; } 以下省略

専門家に質問してみよう