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クラスという概念自体存在するのか怪しい。 だいたいのことは拡張メソッドでなんとかするというのが多いです。