C#
 Computer >> コンピューター >  >> プログラミング >> C#

Javaの関数型インターフェースに相当するC#の機能は「デリゲート」!使い方を徹底解説

Javaにおける関数型インターフェース(Functional Interface)に相当する機能は、C#ではデリゲート(Delegate)です。

どちらも「メソッドを変数のように扱う」という同じ目的を果たしますが、言語ごとに実装方法が異なります。本記事では、JavaとC#それぞれのコード例を比較しながら、その違いをわかりやすく解説します。

Javaにおける関数型インターフェースの実装例

Javaでは、@FunctionalInterfaceアノテーションを付与したインターフェースを定義し、ラムダ式で実装を代入できます。

@FunctionalInterface
public interface MyInterface {
    void invoke();
}
public class Demo {
    void method(){
        MyInterface x = () -> MyFunc();
        x.invoke();
    }
    void MyFunc() {
    }
}

この例では、抽象メソッドを1つだけ持つMyInterfaceを定義しています。() -> MyFunc()というラムダ式をインターフェース型の変数に代入することで、メソッド呼び出しを柔軟に記述できます。

C#におけるデリゲートを使った同等の実装

同じ処理をC#で実現する場合は、delegateキーワードを使用します。デリゲートは、特定のシグネチャを持つメソッドへの参照を格納できる型です。

public delegate void MyInterface();
public class Demo {
    internal virtual void method() {
        MyInterface x = () => MyFunc();
        x();
    }
    internal virtual void MyFunc() {
    }
}

Javaではインターフェースとして宣言していた部分が、C#ではdelegateによる型宣言に置き換わっています。また、呼び出し方法もx.invoke()ではなく、メソッドのように直接x()と記述できる点が特徴的です。

JavaとC#の主な違いまとめ

  • Java:単一の抽象メソッドを持つインターフェース(SAMインターフェース)として定義し、@FunctionalInterfaceで明示する
  • C#delegateキーワードで専用の型を宣言する
  • 呼び出し方:Javaはinvoke()メソッド経由、C#は変数名を直接メソッドのように呼び出す

このように、Javaの関数型インターフェースとC#のデリゲートは、構文こそ異なるものの、ラムダ式と組み合わせてメソッドを第一級オブジェクトとして扱うという点で本質的に同じ役割を果たします。両者の違いを理解しておくと、マルチパラダイムな開発においてコードの移植や設計がスムーズになります。

  1. MySQLにおけるJavaのlong型に相当するデータ型は何?BIGINTとの対応を解説

    MySQLにおけるJavaのlong型に相当する型は「BIGINT」MySQLの変数(カラム)のコンテキストにおいて、Javaのlong型に相当するデータ型はBIGINTです。Javaのlong型は8バイトのサイズを持ちますが、MySQLのBIGINTもまったく同じく8バイトを使用します。そのため、Javaのlong型で扱える値は、範囲を超えることなくそのままBIGINTカラムに格納することが可能です。Javaのlong型のデモ以下は、Javaのlong型が扱える最大の正の値を出力するサンプルコードです。public class JavaLongDemo { public static

  2. MySQLのSMALLINTに相当するJavaの型は?short型との対応関係を解説

    MySQLのSMALLINTに相当するJavaのデータ型は、short型です。Javaのshort型は2バイト(16ビット)の符号付き整数で、-32768から32767までの範囲の値を扱うことができます。MySQLのSMALLINTも同様に2バイトで、同じ範囲の値を格納可能です。MySQLのSMALLINTとJavaのshort型の比較項目MySQL(SMALLINT)Java(short)サイズ2バイト(16ビット)2バイト(16ビット)値の範囲-32768 ~ 32767-32768 ~ 32767備考UNSIGNEDを指定すると0 ~ 65535になる符号付きのみなお、MySQLでUNS