すべてのカテゴリ » インターネット・パソコン » 技術・プログラミング

質問

終了

C#3.0ではオブジェクト初期化子が追加され、例えば
var satou
= new Member { Code = 5 , Name = "佐藤”, Age = 31 };
などと、C#2.0までよりも簡略化して書くことができます。しかし、既定のクラス、例えばFontクラスで同様の記述を以下のようにすると、
Font font = new Font { FontFamily = FontFamily.GenericMonospace, Style = FontStyle.Strikeout };
とすると、
'System.Drawing.Font' に、引数を '0' 個指定できるコンストラクタがありません。
というエラーになってしまいます。オブジェクト初期化子は自作クラス(カスタムクラス)の初期化にしか使えないのでしょうか?

  • 質問者:ss
  • 質問日時:2009-02-18 18:50:58
  • 0

Font font = new Font() {
  FontFamily = FontFamily.GenericMonospace,
  Style = FontStyle.Strikeout};
とした場合、以下のコードを書いたのと同じ事になります。

Font font = new Font();
font.FontFamily = FontFamily.GenericMonospace;
font.Style = FontStyle.Strikeout;

ところが、FontクラスにはFont()という引数なしのコントラクタは存在しません。
そのため「引数を'0'個指定できるコンストラクタがありません。」というエラーになります。
さらに言うと、FontFamilyプロパティとStyleプロパティはどちらもgetのみ可能です。
もし仮にFont()というコントラクタが存在しコンパイルが通ったとしても、
直後に「FontFamilyやStyleに値を代入できない。」とエラーになるはずです。

FontクラスにはFont(Font, FontStyle)というコンストラクタがあるので、そちらを使ってください。
参考までにFontクラスのAPIを載せておきます。
http://msdn.microsoft.com/ja-jp/library/system.drawing.font(VS.80).aspx

#コードが間違っていたので再投稿しました。

この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。
お礼コメント

ありがとうございます。
クラスのオブジェクトを作ったときは、プロパティに何らかの値を常にsetしているのかと思っていました。勉強になりました。ありがとうございました。

関連する質問・相談

Sooda!からのお知らせ

一覧を見る