R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

昔見た問題(その2)

http://blogs.wankuma.com/rti/archive/2007/04/16/71609.aspx
昔見た問題

の続きです。

今回は、以下の C# のコードを 1 行にまとめるまでの

道のり

についてです。


派生クラス b = null;

b = new 派生クラス();


基本クラス x = null;

x = (基本クラス)b;


まず、型の定義と初期化は、以下のように一行にまとめられます。


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



次に、継承しているクラスから生成されたオブジェクトは、その基本クラス、または基本クラスの基本クラスに対して型セーフとなるため、明示的にキャストしなくても良いことを知って下さい。
(現に、全てのオブジェクトは、object 型に代入できますよね?)

http://blogs.wankuma.com/shannon/archive/2007/04/16/71621.aspx
詳細は、上記リンクにわかりやすい説明が書いてあります。


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


そして、「new 派生クラス();」は、オブジェクトを生成するための単なる処理です。
ですから、生成したオブジェクトを x という変数に格納すると考えれば、以下の記述が可能になることもすんなりと納得できるのでした。


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


投稿日時 : 2007年4月19日 11:43

Feedback

# re: 昔見た問題(その2) 2007/04/19 12:14 かずくん

> (現に、全てのオブジェクトは、object 型に代入できますよね?)
ここでつまづく人がいるかもしれないので、

http://blogs.wankuma.com/shannon/archive/2007/04/16/71621.aspx

で、シャノンさんが述べているように、リスコフの置換原則についても、軽く言及しといた方がいい希ガス。

# re: 昔見た問題(その2) 2007/04/19 12:17 オノデラ

> そして、「new 派生クラス();」は、オブジェクトを生成するための単なる処理です。
> ですから、次のように書くこともできます。
> --------------------------------------------------------------------------------
> (new 派生クラス()).メソッド();

# re: 昔見た問題(その2) 2007/04/19 12:20 オノデラ

間違って Enter 走った(^_^;)

> そして、「new 派生クラス();」は、オブジェクトを生成するための単なる処理です。
> ですから、次のように書くこともできます。
> --------------------------------------------------------------------------------
> (new 派生クラス()).メソッド();

この文章は本題とあんまり関係なさそうなので、ないほうが全体的にすっきり見えるような気がします。

# re: 昔見た問題(その2) 2007/04/19 13:16 taka

確かに
> そして、「new 派生クラス();」は、オブジェクトを生成するための単なる処理です。
> ですから、次のように書くこともできます。
> --------------------------------------------------------------------------------
> (new 派生クラス()).メソッド();
はあまり関係ないっすね。

この話の主眼はなぜ基本クラスの変数に派生クラスの変数がキャストなしで格納できるか?
といったところだと思うので、

コンストラクタが只のメソッドだって説明は無くても良いと思います。

個人的にはnewって実は
new(Type T)
見たいな感じ?とか上記の説明をみたら思いました。

# re: 昔見た問題(その2) 2007/04/19 13:24 まどか

>> (new 派生クラス()).メソッド();
> この文章は本題とあんまり関係なさそうなので、ないほうが全体的にすっきり見えるような気がします。

同じく。
実際にはインスタンスを返す関数と同じなんだろうけど
ステートメントというか言語キーワードなので、書き方としては、、、。
間のピリオドにとっても違和感が。

# re: 昔見た問題(その2) 2007/04/19 14:27 とっちゃん

この記事でのポイントは
(参照型の)基本クラスの変数が、派生クラスのインスタンスを保持できる(代入できる)
というところですよね。

であればこそですが、皆さんが口をそろえているように、
> (new 派生クラス()).メソッド();
な部分は不要だと思いますよ。

# re: 昔見た問題(その2) 2007/04/20 10:03 R・田中一郎

かずくん さん

>で、シャノンさんが述べているように、リスコフの置換原則についても、軽く言及しといた方がいい希ガス。

言及できるだけの知識が僕にはない希ガス orz

--------------------------------------------------------------------------------
オノデラ さん

>この文章は本題とあんまり関係なさそうなので、ないほうが全体的にすっきり見えるような気

言われてみるとそうですね。削除しておきます。

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

>コンストラクタが只のメソッドだって説明は無くても良いと思います。

うーむ、やっぱりそうか。
この部分だけ、ちょっと浮いている気がしたんですよね。

--------------------------------------------------------------------------------
まどか さん

>ステートメントというか言語キーワードなので、書き方としては、、、。

確かに、良いサンプルでは無いですしね。

--------------------------------------------------------------------------------
とっちゃん

>(参照型の)基本クラスの変数が、派生クラスのインスタンスを保持できる(代入できる)

そうですね。確かに。削除しておきます。
今読み返すと、逆にややこしくしてしまっているみたいですね。

# sezcOauhjSu 2011/11/28 19:37 http://catalinabiosolutions.com

Hi! Everyone who reads this blog - Happy Reconciliation and Accord..!

# AHGDdZQMfPdZvctuit 2011/12/19 21:28 http://paydayloansnocreditcheck.biz/

I do`t regret that spent a few of minutes for reading. Write more often, surely'll come to read something new!...

タイトル
名前
Url
コメント