C#/いまさらヒトに聞けないこといろいろ/デリゲート
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
**C#はDelegateを言語でサポートしてるみたい [#ib7cd4ac]
C#では「delegate」という機構で、実装の切替をすることが言...
package console_application1;
public class Program {
public static void main(String[] args) {
Base plus = new Plus();
Base mult = new Mult();
calc(2, 3, plus);
calc(2, 3, mult);
}
public static void calc(int x, int y, Base instance) {
int result = instance.method(x, y);
System.out.println(result);
}
}
interface Base {
int method(int x, int y);
}
class Plus implements Base {
public int method(int x, int y) {
return x + y;
}
}
class Mult implements Base {
public int method(int x, int y) {
return x * y;
}
}
もちろんC#でdelegateを使わないで書くこともできます。こん...
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Base plus = new Plus();
Base mult = new Mult();
calc(2,3, plus);
calc(2,3, mult);
}
public static void calc(int x, int y, Base instance)
{
int result=instance.method(x,y);
Console.WriteLine(result);
}
}
interface Base
{
int method(int x, int y);
}
class Plus : Base
{
public int method(int x, int y)
{
return x + y;
}
}
class Mult : Base
{
public int method(int x, int y)
{
return x * y;
}
}
}
JavaとC#はほとんど書き方が同じでJava使いの私としてはラク...
さてこれをC#のdelegateでかくとこんな感じみたいです
using System;
namespace ConsoleApplication1
{
delegate int Calculator(int x, int y);//delegateの宣言
class CalculatorBase
{
public int methodMult(int x, int y)
{
return x * y;
}
public int methodPlus(int x, int y)
{
return x + y;
}
}
class Program
{
static void Main(string[] args)
{
CalculatorBase calculator = new CalculatorBase();
calc(2, 3, new Calculator(calculator.methodPlus));
calc(2, 3, new Calculator(calculator.methodMult));
}
public static void calc(int x, int y, Calculator ins...
{
int result=instance(x,y);
Console.WriteLine(result);
}
}
}
メソッドの型(?)を
delegate int Calculator(int x, int y);
って宣言しておいて、実装を
new Calculator(calculator.methodPlus)
ってコンストラクタで指定するって感じ?Javaのインタフェー...
ちなみに
new Calculator(calculator.methodPlus) の箇所は下記のよう...
calc(2, 3, new Calculator(calculator.methodPlus));
-> calc(2, 3, calculator.methodPlus);
ちょっとシンプルになります
**匿名クラスっぽくかいてみる [#ha50a611]
calc(2, 3, new Calculator(calculator.methodPlus));
の箇所はいわゆる匿名クラスみたいな感じで書くこともできま...
calc(2, 3, new Calculator(delegate(int x, int y)
{
return x - y;
}));
「delegate」て単語を使うって事ですね。
**ラムダ式?ってのもあるらしい [#e0f332e1]
calc(2, 3, new Calculator((int x, int y) =>
{
return x + y;
}));
こうやってdelegateって単語すら省略できたり、果ては
calc(2, 3, new Calculator((int x, int y) => x + y));
こういう文法もあるみたいです。
C#ややこしいです(´д`;)
**関連リンク [#oa8b34d8]
-C#/いまさらヒトに聞けないこといろいろ/汎用的なデリゲート
-[[@IT:連載 改訂版 C#入門 第13章 処理を委譲するデリ...
-[[C#ラムダ式 基礎文法最速マスター − @IT>http://www.atma...
-[[C#のデリゲートとイベントの使い分け>http://tec.jpn.ph/c...
----
この記事は
#vote(おもしろかった[4],そうでもない[3])
- C#の中カッコを行変えするのが慣れないなぁ。 -- [[きの]] ...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents
**C#はDelegateを言語でサポートしてるみたい [#ib7cd4ac]
C#では「delegate」という機構で、実装の切替をすることが言...
package console_application1;
public class Program {
public static void main(String[] args) {
Base plus = new Plus();
Base mult = new Mult();
calc(2, 3, plus);
calc(2, 3, mult);
}
public static void calc(int x, int y, Base instance) {
int result = instance.method(x, y);
System.out.println(result);
}
}
interface Base {
int method(int x, int y);
}
class Plus implements Base {
public int method(int x, int y) {
return x + y;
}
}
class Mult implements Base {
public int method(int x, int y) {
return x * y;
}
}
もちろんC#でdelegateを使わないで書くこともできます。こん...
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Base plus = new Plus();
Base mult = new Mult();
calc(2,3, plus);
calc(2,3, mult);
}
public static void calc(int x, int y, Base instance)
{
int result=instance.method(x,y);
Console.WriteLine(result);
}
}
interface Base
{
int method(int x, int y);
}
class Plus : Base
{
public int method(int x, int y)
{
return x + y;
}
}
class Mult : Base
{
public int method(int x, int y)
{
return x * y;
}
}
}
JavaとC#はほとんど書き方が同じでJava使いの私としてはラク...
さてこれをC#のdelegateでかくとこんな感じみたいです
using System;
namespace ConsoleApplication1
{
delegate int Calculator(int x, int y);//delegateの宣言
class CalculatorBase
{
public int methodMult(int x, int y)
{
return x * y;
}
public int methodPlus(int x, int y)
{
return x + y;
}
}
class Program
{
static void Main(string[] args)
{
CalculatorBase calculator = new CalculatorBase();
calc(2, 3, new Calculator(calculator.methodPlus));
calc(2, 3, new Calculator(calculator.methodMult));
}
public static void calc(int x, int y, Calculator ins...
{
int result=instance(x,y);
Console.WriteLine(result);
}
}
}
メソッドの型(?)を
delegate int Calculator(int x, int y);
って宣言しておいて、実装を
new Calculator(calculator.methodPlus)
ってコンストラクタで指定するって感じ?Javaのインタフェー...
ちなみに
new Calculator(calculator.methodPlus) の箇所は下記のよう...
calc(2, 3, new Calculator(calculator.methodPlus));
-> calc(2, 3, calculator.methodPlus);
ちょっとシンプルになります
**匿名クラスっぽくかいてみる [#ha50a611]
calc(2, 3, new Calculator(calculator.methodPlus));
の箇所はいわゆる匿名クラスみたいな感じで書くこともできま...
calc(2, 3, new Calculator(delegate(int x, int y)
{
return x - y;
}));
「delegate」て単語を使うって事ですね。
**ラムダ式?ってのもあるらしい [#e0f332e1]
calc(2, 3, new Calculator((int x, int y) =>
{
return x + y;
}));
こうやってdelegateって単語すら省略できたり、果ては
calc(2, 3, new Calculator((int x, int y) => x + y));
こういう文法もあるみたいです。
C#ややこしいです(´д`;)
**関連リンク [#oa8b34d8]
-C#/いまさらヒトに聞けないこといろいろ/汎用的なデリゲート
-[[@IT:連載 改訂版 C#入門 第13章 処理を委譲するデリ...
-[[C#ラムダ式 基礎文法最速マスター − @IT>http://www.atma...
-[[C#のデリゲートとイベントの使い分け>http://tec.jpn.ph/c...
----
この記事は
#vote(おもしろかった[4],そうでもない[3])
- C#の中カッコを行変えするのが慣れないなぁ。 -- [[きの]] ...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: