ゆるふわで雑な日記

Microsoft系の技術情報を中心にゆるふわに綴っていく予定です

昨日なんとなく話題になったので、C#の共変性について書いてみる

内容的には今更感満載ですが(5年前に書け) 普段割と意識してないからなのか意外とちゃんと答えられない(かった)ので、 少し書いてみることにしようと…

ほんとのきっかけは、ここで話題になったから

cs-reading.doorkeeper.jp

まず、簡単に、適当な(言語仕様的な)共変性の例は↓な感じでしょうか?

For blog

Genericなinterfaceの型パラメータに「out」をつけると、 型パラメータがUpCastな代入ができるって感じの奴です。

なぜこれが話題になったのか? それは、例示されていたサンプルコードが、(言語仕様としての)共変性を使ってなかったから! そのまま引用すると著作権的な何かがあるかもなので、似たようなコードを書きます

For blog2 Sample

こんな感じです。 これだと確かにGetの実装がサブクラスの型を返しているので、共変性的な事は行われているんですが、 IRepository型の変数にUserRepositoryが格納できるわけではないので、先に例示した共変性とは少し違うんですね。 昨日はここの部分が中々に理解しがたい(人が多かった)ように思いました。 共変性の「out」は省略できるのでは?とか色々よくわからない方向に話が展開したりして… とは言え、結論が出なくても話題にすると理解が深まったりすることも多いので、とても有意義な時間でした。 次回の読書会は年明け(確か13日)なので、興味がある方は是非参加してみてください(Skype枠もあるよ)

久しぶりのblogで適当な文章を公開するという暴挙!!