C#を勉強しています。
アクセス制限の記述方法で疑問がいくつかありまして
詳しい方教えて下さい。
C#では
と記述されているこれらは
C++の様に
と省略出来ないのでしょうか。
出来ないなら、C#はそーいうものだと覚える感じですか?
オブジェクトのフィールド内にある値を取得したり、代入したりするのに
C++では当然の様にゲッターやセッターを個別に作っていたのですが
C#ではそこはプロパティひとつ作れば、事足りるってことでしょうか?
さっきのclass Aに追加するとして、
みたいな。
C#だと、これで他のクラス内で
A.a=1;やA.b=a;などの記述で
aを読むこともaに代入することも容易に出来てしまう、
という認識でよろしいですか?
教えて下さいませ。
C++とC#の記述方法の違い
Re: C++とC#の記述方法の違い
アクセス修飾子については個別につけるしかありません。そういうものです。
プロパティについては、考え方としてはあってますが記述には注意してください。
この記述で aのセッターを使おうとして
とすると死にます。Aクラスのaというセッターのプロパティは
が内容ですので、受け取った値を aに対して与えようとします。
しかしこのセッターに記述されているaはAクラスのセッターのプロパティ名ですので、また受け取った値を aに対して与えようとします。
つまり、無限ループになって止まらなくなり、プログラムが落ちます。
この場合、意図した動作であろうコードは以下のような物になります
さらに、こういう場合は以下のような記述でよいです。
この記述ですと、get set の中身が自動的に実装されて、プログラマからみえない変数に自動でget setしてくれます。
プロパティについては、考え方としてはあってますが記述には注意してください。
この記述で aのセッターを使おうとして
とすると死にます。Aクラスのaというセッターのプロパティは
が内容ですので、受け取った値を aに対して与えようとします。
しかしこのセッターに記述されているaはAクラスのセッターのプロパティ名ですので、また受け取った値を aに対して与えようとします。
つまり、無限ループになって止まらなくなり、プログラムが落ちます。
この場合、意図した動作であろうコードは以下のような物になります
さらに、こういう場合は以下のような記述でよいです。
この記述ですと、get set の中身が自動的に実装されて、プログラマからみえない変数に自動でget setしてくれます。
オフトピック
記述としては以上になりますが、そもそもsetter,getterを当然のようにつくるような設計は何かがおかしい可能性があります。
getterはある程度仕方ないこともありますが、setterはなるべくいらなくなるような設計のほうが扱いやすくなりやすいでしょう。
getterはある程度仕方ないこともありますが、setterはなるべくいらなくなるような設計のほうが扱いやすくなりやすいでしょう。
Re: C++とC#の記述方法の違い
hideさん
回答して頂き、ありがとうございます
a = 10;
とやっても無限ループにならない、と言う事ですよね?
しかし、 との違いが私にはわからないのですが、
前者の get;set;のみの記述の方だと、その内容(return aやa = value)を書かずとも
aの値を参照出来たり、aへの代入 をしてくれると言うことでしょうか??
すみません、自分でも変な質問してるかもしれませんが
C#を勉強し始めてるところですので、、
あと、これは推測なんですが、
C#ってC++と違ってグローバル化したいクラスをSingletonしなくても
もともとすべてのクラスがSingletonした状態の様に扱える、って状態ですか?
(というか、C++自体がSingletonしないとグローバルなクラスを作れなかった??)
回答して頂き、ありがとうございます
この記述だと
a = 10;
とやっても無限ループにならない、と言う事ですよね?
しかし、 との違いが私にはわからないのですが、
前者の get;set;のみの記述の方だと、その内容(return aやa = value)を書かずとも
aの値を参照出来たり、aへの代入 をしてくれると言うことでしょうか??
すみません、自分でも変な質問してるかもしれませんが
C#を勉強し始めてるところですので、、
あと、これは推測なんですが、
C#ってC++と違ってグローバル化したいクラスをSingletonしなくても
もともとすべてのクラスがSingletonした状態の様に扱える、って状態ですか?
(というか、C++自体がSingletonしないとグローバルなクラスを作れなかった??)