- PR -

特集「私がJavaからC#に乗り換えた10の理由」について

投稿者投稿内容
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2003-07-16 10:44
>悪夢を統べるもの さん
>こういう変更は仕様変更になります.

あ、そうか。そうですね。
じゃ、「string型で保持していたのをSHIFT-JISのバイト配列で保持するように変更になった」にします。

>Nameを直接返したらいけないのでは?

これは、「20文字以上の長さを返すのは不正な値を返していることになる」ということですか?
そのためにgetアクセッサ(get{・・・}の部分)があります。

>ya さん
コード:
c1.SampleEvent1 += new SampleEvent1Handler(m.listenClass1SampleEvent1);
c2.SampleEvent2 += new SampleEvent2Handler(m.listenClass2SampleEvent2);


はできて、
コード:
//error : c1.SampleEvent1 += new SampleEvent2Handler(m.listenClass1SampleEvent1);
//error : c2.SampleEvent2 += new SampleEvent1Handler(m.listenClass2SampleEvent2);


はもちろんできませんが、
コード:
c1.SampleEvent1 += new SampleEvent1Handler(m.listenClass2SampleEvent2);
c2.SampleEvent2 += new SampleEvent2Handler(m.listenClass1SampleEvent1);


はできますよね。

listenClass1SampleEvent1()を書いた人はSampleEvent1Handler型のメソッドのつもりで書いたのでしょうが、SampleEvent2Handler型として扱うこともできます。
delegateがあったとしても、やはりメソッドの型というのは引数と返り値で決まるのではないでしょうか。(JavaやC#では)

そう考えていくと、メソッドに明確な型を持たせるというのも面白いかもしれませんね。
コード:
private SampleEvent1Handler void listenClass1SampleEvent1(object sender, EventArgs e)
 {
 }
 private SampleEvent2Handler void listenClass2SampleEvent2(object sender, EventArgs e)
 {
 }


のように。

昔C言語で
double f(){
}
という関数があった場合、「関数f()の型はdoubleだ」などと言われましたが、これはつまり
i=f();
のようにコード中にf()が出てきたら、その部分は最終的にdouble型になるということだったんでしょうね。だからiがint型などであればwarningが出る、それは
i=2.3;
と同じ事だからです。

オブジェクト指向言語で「メソッドもオブジェクトだ」というなら、メソッド自体に型があってもいいんじゃないですかね。

お、もしかして凄いこと言っちゃったかも。
次に出る言語でメソッドにも型を指定するようになっちゃうかも。
・・・・・・んなこた〜ないか。
object
ぬし
会議室デビュー日: 2002/03/20
投稿数: 338
お住まい・勤務地: 香川県高松市
投稿日時: 2003-07-16 11:26
objectです。
一言だけ!

>一郎さん
メソッドの全てに対して、自動的に型が付いたのでは、型が発散して、管理すら出来なくなるかも知れません。
実際意味が無いですね!
その為にこそ、「delegate」があると私は思いますよ!

>yaさん
>英-Ranさん
私は、基本的にはyaさんと同じ意見ですが、お二人が全く異なる事を言っている訳では無いと私は思います。
「delegate」を型の視点で整理してみると良いと思います。
メソッドは、型付けしないと、殆ど有効には利用出来ないと私は思います。

因みに、「Delphi」では、当然の事として「メソッド」の型付けが出来ます。
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-07-16 12:39
ども、ほむらです。
C++の話が出てきたので僕的な認識をちょっと。。。。
------------------
delegateとは。つまり関数のポインタのことですから
サンプルで提示されているような使い方ならないほうがいいとおもいます。
普通にメソッドを呼ぶことと何の違いがあるのか。。。。

関数のポインタが威力を発揮するのはマルチスレッドの内部または
ループ内で使用されているときだとおもいます。
(もちろん処理系として独立されていることが絶対条件ですが)

まったく同じ処理系の中で異なる処理をさせる場合などが
効果的な使い方ではないのでしょうか。。
そして、この関数のポインタ的要素がバグの発生源であり
保守性の低下につながることとして
Javaには採用されていないのだと思います。
(ポインタに過剰反応をしなければならないというのもあるかもしれません(言語思想))

WIN APIでいえば、Windowプロシージャのサブクラス化とか、
WinMain()内での更新処理の記述等でしょうか。。。

# 僕としてはC#はC++にJaveなどの多言語からいい所どりという感じです
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-07-16 13:48
引用:

一郎さんの書き込み (2003-07-15 17:34) より:
後々の変更を考えて素通りでもプロパティ使うということではないでしょうか。


 グゥの音も出ません。忘れてました、自分が人に言っていることを。。。


 う〜ん、それならばいっそのこと、
言語仕様として「publicなメンバ変数は作れない」ようにしてしまっては・・・?
Kuolema
会議室デビュー日: 2002/05/03
投稿数: 12
投稿日時: 2003-07-16 15:02
引用:

Jittaさんの書き込み (2003-07-16 13:48) より:
 う〜ん、それならばいっそのこと、
言語仕様として「publicなメンバ変数は作れない」ようにしてしまっては・・・?


フィールドに対し、直接アクセスできる(する)ことは×ということで、言語の枠を超え、皆様で一致していると思いますので、
それではこの際、次の言語仕様改定時に、C#ではpublic フィールドを使うときには、ポインタ使用時と同様に「unsafe」キーワードを着けないとコンパイルエラーとなるように、何方か提案してみませんか
(廃止しないで非常口を残すのがC#流?、廃止してしまうのがJava流?)?

#くだらない突っ込みですみません(笑)。

#ちなみに、C#流、Java流とは、プロパティの存在意義について、Java支持者とC#支持者
#の気持ちを反映した(つもり)の言い回しです。


[ メッセージ編集済み 編集者: Kuolema 編集日時 2003-07-19 01:23 ]
ヒデ
ベテラン
会議室デビュー日: 2002/12/12
投稿数: 76
お住まい・勤務地: 横浜
投稿日時: 2003-07-16 15:49
すごい盛り上がりのようですね。
違う世界の話しとは思いましたが、興味深く拝見しています。
 <8080が出た頃から主にファーム畑を歩いてきたので>

引用:

フィールドに対し、直接アクセスできる(する)ことは×ということで、言語の枠を超え、皆様で一致していると思いますので、



アプリケーションに限定しての話しですよね ?

不勉強で C# も JAVA も全くわかりませんが、
monitar や driver は、直接参照できなければやっていられませんよ。
  私自身はあまり経験がありませんが、ワンチップの世界では今でも
  アセンブラが主流だったと思います。

最近は、Linux の kernel をいじっていますが、
やはり、c が一番向いているような気がしますよ。
遠藤@DA
@ITエディタ
会議室デビュー日: 2001/08/25
投稿数: 60
お住まい・勤務地: Tokyo
投稿日時: 2003-07-16 17:29
Insider.NET Editorの遠藤です。こんにちわ。

本記事の筆者である尾島氏の依頼により、記事の一部を更新しました。
更新個所は、

- 理由01 - struct
- 理由02 - delegate
- 理由07 - virtualとoverride

の3個所で、それぞれのページ末および、

http://www.atmarkit.co.jp/fdotnet/aboutfdotnet/aftercare/aftercare.html

に更新履歴を記しています。お時間のある方はぜひご確認ください。

引き続き、今後ともよろしくお願いします。
さらだ
会議室デビュー日: 2003/07/11
投稿数: 17
投稿日時: 2003-07-16 20:56
更新記事を酒の肴に第2次大戦勃発の予感
汚い言葉は慎んで、楽しくケンカしようね!!

スキルアップ/キャリアアップ(JOB@IT)