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

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

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

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

Q&A

3回答

13711閲覧

C#で、プロパティの使い方を知りたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

0グッド

1クリップ

投稿2015/10/27 11:08

C#で、プロパティの使い方がよくわかりません。
プロパティって、フィールド(グローバル変数)とはどう違うのでしょう?

たとえば、
http://ufcpp.net/study/csharp/oo_property.html
を読んでも、いまいち必然性がわからずにおります。

using System;

class Complex{
public double Re { get; set; }
public double Im { get; set; }

public double Abs { get { return Math.Sqrt(Re * Re + Im * Im); } }

}

// クラス利用側
class PropertySample{
static void Main() {
Complex c = new Complex();
c.Re = 4;
c.Im = 3;
Console.Write("|{0} + ", c.Re);
Console.Write("{0}i| =", c.Im);
Console.Write(" {0}\n", c.Abs);
}
}

というのがあるときに、

class Complex{
public double Re;
public double Im;

public double Abs { return Math.Sqrt(Re * Re + Im * Im); }

}

と書いてもおなじように動くように思えるのです。
なにがよいのか、教えていただけるとうれしいです。

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

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

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

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

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

guest

回答3

0

プロパティの本質は『メソッドを変数のように扱える』ことだと思います。
これによって以下のメリットがあります。

・変数では外から自由に値を書き換えられてしまうが、メソッドなので書き換える前にチェックができる。
・実際にはメソッドなのにまるで変数を操作しているように見せかけられる。
・変数を操作する際に一緒にロジックを走らせられる。

実例でいうと例えば、
・プロパティA(int型)を設定させたいが1~5までしか受け付けないようにしたい。
・実際にはMove(index)メソッドなのにIndexプロパティとしてアクセス出来る。
・Textプロパティを変更したら同時に画面に表示させたい。

みたいな感じでしょうか。

投稿2015/10/27 13:07

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Ryzna

2015/11/01 04:29

ビルド時のエラーになるけど一応注意点として。 何らかのメソッドのoutパラメータとしてプロパティを指定する事が出来ません。 変数っぽく扱えるけど、実際はメソッドなので。 以下、例 // こんなクラスがあって pubilc class Class1 { string Property { get; set; } } // こんなメソッドの戻り値をPropertyに入れたい場合 public void Function1(out string param1) { param1 = "called function1"; } public void main(object[] args) { var ins = new Class1(); // ↓これはNG Function1(out ins.Property); // ↓こうしなきゃいけない。 string result; Function1(out result); ins.Property = result; }
guest

0

これは参考になりませんか?
連載! とことん C#: 第 5 回 フィールド (メンバ変数) とプロパティはここが違う

個人的には自動実装プロパティが便利すぎて..

投稿2015/10/27 11:36

dojikko

総合スコア3939

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

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

0

プロパティの変更時にイベントを発火したい時や,getだけpublicでsetはprivateにしたい時便利です.

setだけprivateにする時.

c#

1public class Hoge 2{ 3 public int Hoge { get; private set; } 4}

値の変更を通知するイベントをプロパティに紐付ける時

c#

1public class Poge 2{ 3 private int _Hoge 4 public int Hoge 5 { 6 get { return _Hoge; } 7 set 8 { 9 if ( _Hoge != value ) 10 { 11 _Hoge = value; 12 RailsPropertyChanged("Hoge"); 13 } 14 } 15 } 16}

C#のプロパティを使えば,カプセル化やイベント発火が簡単になります.

投稿2015/10/27 12:32

編集2015/10/27 13:35
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問