R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

昔見た問題

前に、C#に関する以下のような問題を見かけました。


基本クラス x = new 派生クラス();

上記で、x は、派生クラスの公開メンバにアクセスできますか?

(派生クラスは、基本クラスを継承しています)


もちろん、派生クラスは、基本クラスを継承しています。

C# というよりも、オブジェクト指向ちっくな問題ですね。

僕が、C# を学び始めて、この問題を見た時は、まず以下の部分に

衝撃

を覚えました。


基本クラス x = new 派生クラス();


こんな書き方ができるなんて思わなかったからです。

しばらく経ってから、この書き方は、以下のような書き方と同じことなのだと気づいた時、深く納得できました。


派生クラス b = null;

b = new 派生クラス(); 

基本クラス x = null;

x = (基本クラス)b;


・・・逆にややこしいですか?

投稿日時 : 2007年4月16日 10:41

Feedback

# re: 昔見た問題 2007/04/16 10:56 επιστημη

これができんとすっげー困るだからー

interface 生物 { void 食う(); }
abstract class 動物 : 生物 { ... }
class 犬 : 動物 { ... }
class 猫 : 動物 { ... }

動物 animal = new 猫(); // 動物はabstractなのでnewできんし。
生物 creature = new 犬(); // interfaceはnewできんし。

# re: 昔見た問題 2007/04/16 10:59 ぽぴ王子

> ・・・逆にややこしいですか?

たぶん(笑)

要するにこういうこと、って感じですよね。
x に null を入れたりする必要はあんまりなさそうな。

基本クラス x = (基本クラス)new 派生クラス();

派生クラスは基本クラスから派生したクラスであるから、基本クラスへのキャストは当然のように行える(はず)。そして元々の式はそのキャストすら省いてしまった形、ってことでしょうか。

> こんな書き方ができるなんて思わなかったからです。

俺漏れヽ(´ー`)ノ
落ち着いて考えるとなんてことはないですが、初めて目にするとびっくりしますよね。

# re: 昔見た問題 2007/04/16 11:00 シャノン

> 上記で、x は、派生クラスの公開メンバにアクセスできますか?

愛と勇気、あるいは、いくばくかのお金があれば可能でしょう(謎

# re: 昔見た問題 2007/04/16 11:12 επιστημη

…あ、そかそか、こんな「書き方」ができることに衝撃なんであって、
基底に導出を代入すること自体は意外ぢゃないのか。

# re: 昔見た問題 2007/04/16 11:41 Hirotow

できません。

#とマジレスしてみる。

# re: 昔見た問題 2007/04/16 11:53 Jitta

当然、続くんですよね?

# re: 昔見た問題 2007/04/16 11:53 επιστημη

Smalltalkだとできちゃうのよねコレが。
Smalltalkには型がなく、すべてをObjectとするもんだから。

# re: 昔見た問題 2007/04/16 11:56 Jitta

あ~!エピさんの「C++昔話」に続くってのもありかも

# re: 昔見た問題 2007/04/16 12:56 刈歩 菜良

6月にやるよ。
ぽぴDayのときのもう一つの候補ネタを6月にやるので。
http://blogs.wankuma.com/carbonara/archive/2007/01/25/58644.aspx

# re: 昔見た問題 2007/04/16 12:57 通りすがり

以下は「x は…できますか」に含まれない?
私は含めても良いと思うので、できると言いたいけど。

基本クラス x = new 派生クラス();
派生クラス y = x as 派生クラス;
if (y != null) y.~;

# re: 昔見た問題 2007/04/16 13:23 シャノン

それが含まれるなら、

 基本クラス x = new 派生クラス();
 派生クラス y = x;
 y.~;

も含まれる?
結局、x.~ でない以上、俺はどっちも「できない」。
#愛と勇気、あるいはいくばくかのお金があれば別です(しつこい

# re: 昔見た問題 2007/04/16 13:31 通りすがり

それはコンパイルエラーだから、含まれないと思います。

# re: 昔見た問題 2007/04/16 13:46 通りすがり

なんか冷たい書き方をしちゃったかも...と少し反省。ごめんなさい。
補足すると、言語仕様として保証されていて絶対安全なのであれば、できると言った方がいいと思っています。

ちなみに、もしそれって y じゃん、という場合は以下になります。
本質はもちろん変わりませんがw
if (x as 派生クラス != null) ((派生クラス)x).~;

# re: 昔見た問題 2007/04/16 13:58 シャノン

> それはコンパイルエラーだから、含まれないと思います。

あぁほんとだ。勘違い。

> if (x as 派生クラス != null) ((派生クラス)x).~;

俺はこれも「できない」に含めます。

# re: 昔見た問題 2007/04/16 14:18 アクア

> シャノンさん

え~~~っ!!
愛と勇気、あるいはいくばくかのお金があっても「できない」ですか?

# いや、ネタの継承なのでスルーを…^^;

# re: 昔見た問題 2007/04/16 14:19 επιστημη

>> if (x as 派生クラス != null) ((派生クラス)x).~;
> 俺はこれも「できない」に含めます。

同意。できないからキャストダウンしてるんだよね。

# re: 昔見た問題 2007/04/16 14:38 επιστημη

んー…

キャストダウンすれば「できる」 とするか
キャストダウンせんならんのだから「できない」 とするか
ってゆーコトバの違いでしかないすねー

# 僕は後者。
# 愛と勇気はともかく、いくばくかのお金で「できる」派に転びます(てへ

# re: 昔見た問題 2007/04/16 14:50 通りすがり

いくら積みましょう?(悪

# re: 昔見た問題 2007/04/16 21:28 taka

遅レス。

土曜日に行ってたのはこの話しだったのですね。
あの時は何の話だかいまいち見えてこなかったけど良く分かったw

# re: 昔見た問題 2007/04/17 14:18 R・田中一郎

επιστημη さん

>…あ、そかそか、こんな「書き方」ができることに衝撃なんであって、
>基底に導出を代入すること自体は意外ぢゃないのか。

そうです。そうです。
わかりにくくてごめんなさい。

-------------------------------------------------
ぽぴ王子 さん

>たぶん(笑)

いや~、何と無くそう思ったのですが、やっぱりそうでしたか。

>落ち着いて考えるとなんてことはないですが、初めて目にするとびっくりしますよね。

そうですね。
気づけたのは、ぽぴ王子さんのおかげでもあることは秘密です。

-------------------------------------------------
シャノン さん

>愛と勇気、あるいは、いくばくかのお金があれば可能でしょう(謎

シャノンさんが言うと、本当に思えるから不思議。

-------------------------------------------------
Hirotow さん

>できません。
>
>#とマジレスしてみる。

僕は、当たってました。

-------------------------------------------------
Jitta さん

>当然、続くんですよね?

はい。
続く・・・と書くのを忘れました。

# 不自然に終わらせているのがバレているみたいですね。

-------------------------------------------------
刈歩 菜良

>6月にやるよ。

素敵だし爽やかディのことかな。

-------------------------------------------------
通りすがり さん

>以下は「x は…できますか」に含まれない?

x は、なので、この場合、y に突っ込んでいるのでできないことになりませんかね??

>なんか冷たい書き方をしちゃったかも...と少し反省。ごめんなさい。

すげーっ、通りすがりの人なのに、丁寧でおじさん感動しちゃいましたよ。

-------------------------------------------------
アクア さん

>愛と勇気、あるいはいくばくかのお金があっても「できない」ですか?

アクアさんは、どちらもたくさん持っていそうですね。

-------------------------------------------------
taka さん

>土曜日に行ってたのはこの話しだったのですね。

そうですそうです。
僕は理解力が遅いので、後から電球が光ることが多々あるんですよね。
少なくとも 2次会の、この時点までは記憶があったという証明でもありますw

# re: 昔見た問題 2007/04/17 15:34 刈歩 菜良

> 素敵だし爽やかディのことかな。
そうでっす!
そん時の私のセッションでやりまっする。

# re: 昔見た問題 2007/04/19 11:18 R・田中一郎

刈歩 菜良 さん

>そん時の私のセッションでやりまっする。

謎のフランス人、要チェックですね。

# 昔見た問題(その2) 2007/04/19 11:43 R.Tanaka.Ichiro's Blog

昔見た問題(その2)

# 昔見た問題(その2) 2007/04/19 11:44 R.Tanaka.Ichiro's Blog

昔見た問題(その2)

タイトル
名前
Url
コメント