質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

6988閲覧

コンストラクタを追加したいです

57svu

総合スコア28

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2017/05/12 07:40

編集2017/05/12 08:15

某サイトの問題で
コンストラクタを追加したいです。

インスタンスが生成された瞬間に
Console.Writeで”コンストラクタ”と表示して初期化したいのですが
Class Sampleで public Sample(){
Console.WriteLine(" コンストラクタ");
}
と記載したところ
public Sample(){ のSampleの下部に青い波線が派生し
”メンバー名をそれを囲む型の同じ名前にすることはできません。”
とエラーメッセージが表示されます。
これは何故でしょうか

c#

1 2namespace prob1_1 3{ 4 class Sample 5 { 6 public void Sample() 7 { 8 console.WriteLine("コンストラクタ"); 9 } 10 public void fool() 11 { 12 13 Console.WriteLine("foo"); 14 } 15 } 16} 17

c#

1 2namespace prob1_1 3{ 4 class Program 5 { 6 static void Main(string[] args) 7 { 8 Sample s = new Sample(); 9 s.fool(); 10 System.Threading.Thread.Sleep(1000); 11 } 12 } 13} 14

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2017/05/12 07:56 編集

貼ってあるコードはなんですか?青い破線云々の説明とコードが合ってません
PineMatsu

2017/05/12 08:07

青い破線が出るところのコードの右側にコメントを入れてください。そうすればどこで出ているのかがわかります。
57svu

2017/05/12 08:15

失礼しました、違うコードをのせていたので訂正しました
guest

回答3

0

ベストアンサー

コンストラクターに戻り値の型(void)を書いてはならないのは他の方の回答どおりです。


エラーメッセージがそうなった理由:

戻り値の型voidを書いても人間がそれを見れば「コンストラクターなんだろうな」という推測ができるのですが、構文規則を頼みとして解析するコンパイラーは「voidという型名」に名前が続いてるので、「コンストラクターの可能性はなく」、「メンバーである」と決めつけて解析を続けます。そしてC#では「メンバーはそれを囲むクラス名と同じ名前であってはならない」という仕様のため、そういうコンパイルエラーになったのです。

「メンバーの名前はそれを囲むクラスと同じではいけません。もしあなたがコンストラクターとして定義しようとしているならvoidを書いてはいけません」

と言ってくれるようなコンパイラーも設計可能でしょうが、コンパイラーというのはそうまで親切に作られてはおらず、「どうかこのエラーメッセージでエラーの内容を汲み取ってください」という作りになっていることが多いです。人間の方がコンパイラーの振る舞いを理解して使ってやらねばならないと思ってください。つまりコンパイルラーのエラーメッセージが「何を言わんとしているか」を把握できる文法知識と想像力が必要なのです。

投稿2017/05/12 08:37

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

57svu

2017/05/15 05:17

ご指摘ありがとうございました! 無事にvoidを外すことで解決できました! パソコンに気持ちをよく考えたいと思います。
guest

0

質問文に
「Class Sampleで

C#

1public Sample(){ 2 Console.WriteLine(" コンストラクタ"); 3}

と記載したところ」

と書いてありますが、
その後にあなたが貼ったコードでは

C#

1public void Sample() 2{ 3 console.WriteLine("コンストラクタ"); 4}

と余計なものがついてます。

投稿2017/05/12 08:24

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

57svu

2017/05/15 05:18

ズバリなご指摘ありがとうございました!
guest

0

C#のコンストラクタはvoidを付けてはいけません。

C#

1public Sample() 2{ 3 console.WriteLine("コンストラクタ"); 4}

コンストラクタは戻り値を返しません。

投稿2017/05/12 08:21

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

57svu

2017/05/15 05:19

素早いご指摘、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問