滅入るんるん

何か書きます

Kotlin使いのためのC#入門 Extensions

> Top

C#はKotlin同様に拡張メソッドはあります(拡張プロパティはない)。 同様にというか、KotlinがC#の拡張メソッドを取り入れたというのが正確ですかね。 拡張プロパティがないのは少し残念ですが、C#の拡張に関する機能は今後機能追加が予定されていますので、それを楽しみにしておきましょう。

Extension Functions

class User
{
    public int Id { get; }
}

static class UserExtension
{
    // 例なのですごいてきとー
    public static int GetId(this User user)
    {
        return user.Id;
    }
}

class Value
{
    public void Main()
    {
        // 通常のメソッド呼び出しと同じように呼び出せる
        int id = new User().GetId();
    }
}

C#の拡張メソッドはstaticクラスのstaticメソッドの第一引数を拡張する型にしthis修飾子を付けることで定義できます。

Extensions are resolved statically

同じような仕組みなので割愛。

Nullable Reciever

C#にはnull許容型は値型にしかありません。参照型はもともとnullable。null許容型の拡張メソッドだからと特殊な記法はないです。

Extension Properties

該当する機能がないため割愛。

Companion Object Extensions

該当する機能がないため割愛。

Scope of Extensions

似ているので割愛。

Declaring Extensions as Members

該当する機能がないため割愛。

Note on visibility

通常のメソッドと同じなので割愛。

Motivation

Kotlin的にはJavaのUtilクラスを滅ぼしたかったようだけど、そもそもC#にはUtilクラスという概念自体存在するのか怪しい。 だいたいのことは拡張メソッドでなんとかするというのが多いです。