これらはPersonクラスの宣言です。
protected int ID { get; set; }
protected string Title { get; set; }
protected string Description { get; set; }
protected TimeSpan jobLength { get; set; }
Get/setを使用するにはどうすればよいですか?主に、私は
Person Tom = new Person();
Tom.set/getはどうですか??
Int getAge()およびvoid setAge()関数を記述するだけのC++スタイルを使用しています。しかし、C#にはgetおよびsetを処理するショートカットがありますか?
それらにアクセスできると仮定すると(宣言したプロパティはprotected
です)、次のように使用します。
Person tom = new Person();
tom.Title = "A title";
string hisTitle = tom.Title;
これらは properties です。基本的には、適切なメタデータを持つゲッター/セッターメソッドのペアです(ゲッターまたはセッターのみを使用できます)。あなたが与えた例は、自動的に実装されたプロパティで、コンパイラがバッキングフィールドを追加しています。ただし、自分でコードを書くことができます。たとえば、宣言したTitle
プロパティは次のようになります。
private string title; // Backing field
protected string Title
{
get { return title; } // Getter
set { title = value; } // Setter
}
...ただし、バッキングフィールドには「説明できない名前」が付けられます。これは、C#コードで参照できない名前です。プロパティ自体を通過する必要があります。
プロパティの一部を別の部分より制限することができます。たとえば、これは非常に一般的です:
private string foo;
public string Foo
{
get { return foo; }
private set { foo = value; }
}
または、自動的に実装されたプロパティとして:
public string Foo { get; private set; }
ここでは、「getter」はパブリックですが、「setter」はプライベートです。
歌のクラスがあると仮定すると(以下を参照できます)、従来の実装は次のようになります。
class Song
{
private String author_name;
public String setauthorname(String X) {}; //implementation goes here
public String getauthorname() {}; //implementation goes here
}
次に、このクラスの実装を検討します。
class Song
{
private String author_name;
public String Author_Name
{
get { return author_name; }
set { author_name= value; }
}
}
「メイン」クラスでは、次のようにコードを記述します。
class TestSong
{
public static void Main(String[] Args)
{
Song _song = new Song(); //create an object for class 'Song'
_song.Author_Name = 'John Biley';
String author = _song.Author_Name;
Console.WriteLine("Authorname = {0}"+author);
}
}
注意すべき点;
設定/取得するメソッドはパブリックまたは保護(注意)する必要がありますが、厳密にプライベートにすることはできません。
これらは プロパティ です。次のように使用します。
Tom.Title = "Accountant";
string desc = Tom.Description;
しかし、それらがprotected
と宣言されていることを考慮すると、それらの可視性が問題になるかもしれません。
ところで、C#3.5では、次のようにオブジェクトのプロパティをインスタンス化できます。
Person TOM=new Person
{
title = "My title", ID = 1
};
ただし、プロパティはパブリックでなければなりません。
これが何であるかわからない
プロパティは、プライベートフィールドの値を読み取り、書き込み、または計算するための柔軟なメカニズムを提供するメンバーです。プロパティはパブリックデータメンバーのように使用できますが、実際にはアクセサと呼ばれる特別なメソッドです。これにより、メソッドの安全性と柔軟性を提供しながら、データに簡単にアクセスできます。
この例では、クラスTimePeriodに期間が格納されています。内部的にはクラスは時間を秒単位で保存しますが、クライアントが時間単位で時間を指定できるHoursというプロパティが提供されます。 Hoursプロパティのアクセサーは、時間と秒の間の変換を実行します。
例
class TimePeriod
{
private double seconds;
public double Hours
{
get { return seconds / 3600; }
set { seconds = value * 3600; }
}
}
class Program
{
static void Main()
{
TimePeriod t = new TimePeriod();
// Assigning the Hours property causes the 'set' accessor to be called.
t.Hours = 24;
// Evaluating the Hours property causes the 'get' accessor to be called.
System.Console.WriteLine("Time in hours: " + t.Hours);
}
}
プロパティの概要
プロパティを使用すると、クラスは実装または検証コードを非表示にしつつ、値を取得および設定するパブリックな方法を公開できます。
getプロパティアクセサを使用してプロパティ値を返し、setアクセサーは、新しい値を割り当てるために使用されます。これらのアクセサーは、異なるアクセスレベルを持つことができます。
Valueキーワードは、セットインデクサーによって割り当てられる値を定義するために使用されます。
Setメソッドを実装しないプロパティは読み取り専用です。
http://msdn.Microsoft.com/en-US/library/x9fsa0sw%28v=vs.80%29.aspx
それらを公開に設定します。つまり、「保護された」という言葉があるところはどこでも、「公共」という言葉に変更します。アクセス制御が必要な場合は、Wordの「get」または「set」の前にアクセス制御を配置します。
protected
の意味があるため、これらのプロパティにアクセスすることはできません。
型またはメンバーにアクセスできるのは、同じクラスまたは構造体のコード、またはそのクラスから派生したクラスのコードのみです。