ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

tag:

C#のout引数は型の反変性をサポートしない

C#で

void Method(string arg)Method(object変数) で呼び出すことは不可能ですが、
void Method(object arg)Method(string変数) で呼び出すことは可能です。

後者はアップキャストを行っています。
前者は、argにnew object()とかが入ってきたら困るので、不可能になっています。

次に、 void Method(ref string arg)Method(ref object変数) で呼び出すことは不可能です。

そして、 void Method(ref object arg)Method(ref string変数)で呼び出すことも不可能です。

前者が不可能な理由は先ほどと同じですが、

後者がなぜ先ほどと違うのかというと、参照渡しの場合は呼び出し元の変数を書き換え可能ですから、
Method内で arg = new object(); とか出来るわけですが、そうした場合に、Methodを呼び出した側からしてみればstring変数にnew object()が入っていることになってしまうからです。

スポンサーサイト
続きを読む

tag: C# 引数 out引数 共変性/反変性 ジェネリックス

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。