R.Tanaka.Ichiro's Blog

主にC# な話題です

目次

Blog 利用状況

ニュース

Constructor じゃだめなの?

class HogeHogePiyoPiyoFugaFuga{
 
    public HogeHogePiyoPiyoFugaFuga() {}
    public HogeHogePiyoPiyoFugaFuga(int value) {}
    public HogeHogePiyoPiyoFugaFuga(string value) {}
    public HogeHogePiyoPiyoFugaFuga(int value, string value2) {}
}
 

こんな感じのクラスを書いていると、なんでコンストラクタとかファイナライザはクラス名と同じじゃないとダメなんだろうと思う。

Constructor

とかのキーワードで統一して欲しいなぁ。 以下のように書いたものを暗にクラス名に差し替えてコンパイルすればいいと思うんだけど、何か問題とかあるんかな?

class HogeHogePiyoPiyoFugaFuga{
 
    public Constructor() {}
    public Constructor(int value) {}
    public Constructor(string value) {}
    public Constructor(int value, string value2) {}
}

投稿日時 : 2011年4月21日 10:18

Feedback

# re: Constructor じゃだめなの? 2011/04/21 10:50 みきぬ

VB.Net の場合は Sub New ですね。
問題があるとかではなくて、文化の違いかなと。

# re: Constructor じゃだめなの? 2011/04/21 10:51 牟田口大介

C#でもできるようになるとVB.NETの売りが一つ失われるから、だったり?^^;

# re: Constructor じゃだめなの? 2011/04/21 10:55 zecl

言わんとすることはわからなくもないですが、
IDEが優秀なので困ったことはありません。
というか、VB.NETの「Newキーワード」が好きかというと、そうでもないので(笑
Javaから来る人なんかが入りやすいというのはあると思います。

# re: Constructor じゃだめなの? 2011/04/21 11:06 todo

thisじゃだめなの?

class HogeHogePiyoPiyoFugaFuga{
 
public this() {}
public this(int value) {}
public this(string value) {}
public this(int value, string value2) {}
}

# re: Constructor じゃだめなの? 2011/04/21 11:10 とっちゃん

パクり元にあたる、C++ がその形なので、JavaとかC#のような、C++ をパクッた言語はみんなそうですね。

VBはC++のパクりじゃないからコンストラクタの命名規約が違っています。

# re: Constructor じゃだめなの? 2011/04/21 11:20 泥爺

むしろキーワード不要で

class HogeHogePiyoPiyoFugaFuga{
 
public () {}
public (int value) {}
public (string value) {}
public (int value, string value2) {}
}

# re: Constructor じゃだめなの? 2011/04/21 11:20 泥爺

むしろキーワード不要で

class HogeHogePiyoPiyoFugaFuga{
 
public () {}
public (int value) {}
public (string value) {}
public (int value, string value2) {}
}

# re: Constructor じゃだめなの? 2011/04/21 12:55 かずくん

Welcome to delphi world?
自由に決めれるぜ

# re: Constructor じゃだめなの? 2011/04/21 14:51 甕星

Welcome to Python World.
_init_に統一ですぜ。

# re: Constructor じゃだめなの? 2011/04/21 20:11 Pasie.

逆にVBは6まで、return は以下だったわけだし。
 Function HogeHogePiyoPiyoFugaFuga() As Integer
   HogeHogePiyoPiyoFugaFuga = 100
 End Function

c# も var とかできてるから、そのうち new とか ok になるのでは?

ところで、
 HogeHogePiyoPiyoFugaFuga a = new HogeHogePiyoPiyoFugaFuga();
のほうはどうなんだろう?
 var a = new HogeHogePiyoPiyoFugaFuga();
ではだめですか?とか。

# re: Constructor じゃだめなの? 2011/04/22 0:21 aetos

メソッド名なら constructor じゃなくて construct ですね。
キーワードなら constructor ですが。
長いので new か create でいいです。

キーワード欲しいですね。
C# だと readonly フィールドはコンストラクタの中でしか初期化できませんが、コンストラクタじゃないけど初期化処理の一部(遅延初期化とかも含む)であるメソッドの中でも設定したいので、メソッドに「これは初期化処理の一部である」というマークをつけたいです。

# re: Constructor じゃだめなの? 2011/04/22 21:29 まりも

慣れているので特に何も思ってませんでしたが。

そういえば、
C++の場合はnewを使わない場合も多いことを考えると、
生成メソッドが型名と同じというのはそれなりに意味がありますが。

C#だと、あまり合理性を感じられない記法ですね。

# re: Constructor じゃだめなの? 2011/04/25 15:06 R・田中一郎

うーむ、できるけど伝統だから・・・みたいな感じなんだろうか?^^;

よその言語へのお誘いもちらほら・・・w

# re: Constructor じゃだめなの? 2011/04/27 10:46 よねけん

コンストラクタがクラス名と同名という縛りがあるせいで、クラス名と同名のメソッドを定義できなくて、ある英単語が動詞であり名詞でもあるような場合(例:TransformクラスのTransformメソッドは定義できない)に、たまに困ります。

CILなら名称が.ctorなメソッドですね。

# re: Constructor じゃだめなの? 2011/04/28 12:04 みきぬ

> TransformクラスのTransformメソッドは定義できない

別名(Execute とか)で代替するかなあ。
名前空間でもそうだけど、同じ名前のほうが混乱しそう。

# re: Constructor じゃだめなの? 2011/04/28 22:55 よねけん

> 別名(Execute とか)で代替するかなあ。

「実行する」だとちょっと曖昧すぎるような。

> 名前空間でもそうだけど、同じ名前のほうが混乱しそう。

例に挙げたものの場合は、実際に使うクラスは、ScaleTransform、RotateTransformのような派生クラスなので特に混乱はないですね。

WPFでは以下のようなクラス構成だったりしますが、GeneralTransformクラスはこの問題を回避するための作だったりして…と勘ぐってしまいます。(実際にはちゃんと役割があるのでしょうが…)

System.Windows.Media.GeneralTransform ←ここでTransformメソッドを定義
 System.Windows.Media.Transform
  System.Windows.Media.CompositeTransform
   System.Windows.Media.RotateTransform


これに近いものをWindows Formsで実装しようとしたときにこの問題に直面しました。
そのときは、Transformクラスの基本クラスとしてBaseTransformクラスを定義してここにTransformメソッドを実装することにしてお茶を濁しましたけど、そのためだけにBaseTransformクラスを定義するのが頂けないなぁと思いまして、C#の弱点の一つだと思いました。

# MxjSHDwZFByZoga 2011/12/29 21:20 http://www.healthinter.org/health/page/abilify.php

Uh, well, explain me a please, I am not quite in the subject, how can it be?!...

# 偽ブランドバッグ 2017/09/28 1:36 axidsewuofj@yahoo.co.jp

しっかりと梱包もなされており、とても満足しています。ありがとうございました。
★COACH コーチ★レザーバニティバッグ★コスメケース/化粧ポーチ/ハンドバッグ★カーフ★ブラウン★
新しいコスメケース
思っていたよりすごくきれいで、うれしいです。長く愛用していきたいと思います。わーい。

# ルイヴィト指輪偽物 2017/10/27 14:27 povmupd@softbank.ne.jp

ショップという対応では無く 事務的な感じを受けました。商品も 午前中に注文しているのに 店舗受付~発送と時間がかかり 商品が届いたのも翌々日と 同じ日に別のショップで午後に注文したショップなのに 翌日には商品が届いたと
印象は遅いな。と感じてしまいました。すみません。。ただ 商品に関しては 安心して購入できそうかな。。と云う感じはあるので 機会が有ったら また利用させて頂こうかな。。と思っています。
★ルイヴィトン★ヴェルニ★ポシェット・クレ★小銭入兼用キーケース★M90348★
小銭入れ兼用キーケース
この形は大好きで 大きさは スイカも入り多目的に使用出来ます。
私は これで 3つめ。。今回購入を決めたのは 廃番と新品で有る事が理由ですが、お値段も納得の価格。届くまでまでは 本物?新品?大丈夫?と不安はあったものの 梱包も丁寧に商品状態も良かったので安心しました。ありがとうございます。

# 激安ブランドのオーデマピゲ腕時計 2021/12/05 19:31 efmzerjop@yahoo.co.jp

日本的な人気と信頼を得ています。
安心、安全にお届けします
価格、品質、自信のある商品を取り揃えておりますので、
当店の主要な経営のブランド:(ヴィトン ) (シャネル) (ロレックス)など.
当店は主に経営する商品:かばん.バッグ .財布 .キーケース. .腕時計など.
日本には無い商品,日本では高価な商品,
弊社のない商品,取引先を代理して製造会社を連絡することができる.
弊社長年の豊富な経験と実績があり.
輸入手続も一切は弊社におまかせできます.ご希望の商品を責任を持ってお届けします.
当店の商品は特恵を与える。興味あれば、是非ご覧下さい
財布、腕時計、バッグ一品市場

タイトル
名前
Url
コメント