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

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

新規登録して質問してみよう
ただいま回答率
85.48%
WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

707閲覧

wpf の自動実装プロパティというものの動きについて

blendegg

総合スコア81

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2019/05/26 07:08

###概要
wpfを使うにあたって、自動実装プロパティというものを避けて通れないということがわかってきました。このようなものです。
public string Hoge { get; set; }
このget;set;がどのような動きをしているかわかりません。

サンプルはいかになります。一方のテキストボックスの内容が、もう一方のテキストボックス内でも同期されるというものです。

想像なんですが、Hoge { get; set; }という部分の、Hogeという変数(?)はxaml内ではテキストボックスのプロパティとして存在し、mainwindow.xaml.cs内には変数として存在します。
mainwindow.xamal.cs内の変数をgetし、xaml内のプロパティにsetするという意味かと感じるのですが、違うでしょうか?

アドバイスお願いします。

###mainwindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace test_binding
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{

public MainWindow() { InitializeComponent(); //クラスのインスタンス HogeClass HogeObject = new HogeClass(); HogeObject.Hoge = "Try it."; stackpanel.DataContext = HogeObject; } public class HogeClass { public string Hoge { get; set; } } }

}

###xaml
<Window x:Class="test_binding.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:test_binding" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">
<StackPanel Name="stackpanel">
<TextBox Name="textbox1" Text="{Binding Hoge, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="10" />
<TextBox Name="textbox2" Text="{Binding Hoge, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="10" />
</StackPanel>
</Window>

###参考にしたサイト
https://water2litter.net/gin/?p=1401

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

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

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

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

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

Zuishin

2019/05/26 07:30

自動実装以外のプロパティはわかりますか?
blendegg

2019/05/26 09:52

自動実装以外というのはよくわかりませんが、プロパティはクラス変数など、クラスの持ち物を示していると思います。
guest

回答1

0

ベストアンサー

C# のプロパティはクラス変数やインスタンス変数ではありません。それらはプロパティではなくフィールドと呼ばれます。

C# のプロパティは変数のように振る舞う関数です。

C#

1public class Person 2{ 3 private int age; 4 5 public int Age 6 { 7 get 8 { 9 return age; 10 } 11 set 12 { 13 age = value; 14 } 15 } 16} 17 18public class Program 19{ 20 static void Main(string[] args) 21 { 22 var person = new Person(); 23 person.Age = 20; 24 } 25}

上記コードの age がフィールドで Age がプロパティです。

Age には get と set の二つの実装があり、値を読み取る時には get が、設定するときには set が使われます。
これらをゲッター、セッターと言います。

しかし、単純なプロパティを作る時にいちいちゲッターとセッターを書いていては煩わしいので、これらの実装の記述を省略することができます。

C#

1public class Person 2{ 3 public int Age 4 { 5 get; 6 set; 7 } 8} 9 10public class Program 11{ 12 static void Main(string[] args) 13 { 14 var person = new Person(); 15 person.Age = 20; 16 } 17}

省略したコードは、コンパイラによって自動的に実装されます。

自動的に実装されたプロパティのことを自動実装プロパティと呼びます。

投稿2019/05/26 10:19

Zuishin

総合スコア28660

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

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

blendegg

2019/05/27 08:53

回答有り難うございます。 get { return age; } set { age = value; } の部分のget setは必要なものでしょうか? return age; age = value; とすれば意味合いとしては同じように思うんですが、クラスのプロパティとして扱うためには必要なものなんでしょうか?
Zuishin

2019/05/27 09:05

必要です。プログラミング言語なので文法は重要です。人間のように忖度してくれません。
blendegg

2019/05/28 03:00

そういうルールだと覚えます。 テンプレートして覚えます。
退会済みユーザー

退会済みユーザー

2019/06/03 07:49

Zuishin←コイツ https://teratail.com/questions/192606 ↑Zuishinの本性、発言内容。コイツが修正しない限り、コメントが残っている事だろう。修正しない限りは。 コイツは、「電話してやる、ビビってるのか?」などと私を煽り、ネットでしかイキがれないクズなのだが、いざ私が電話番号を教えてやったら、「書いたね。ご苦労さん。あとは好きなだけ吠えてろ」と、逃げる腐れ外道であり、精神疾患患者である。 こう言うゴミが生きてる事自体が許せない。皆さんもコイツには気をつけましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問