実際には、ゲッターとセッターだけがあります。技術的には、IIRCのCLI仕様(ECMA 335セクション1.8.11.3)はこれらだけに制限されていないため、他の言語は他の意味を自由に追加できますが、実際にはありません。
これは表に示され、ILII.17
のキャプションを使用します(ゲッター、セッター、および属性用であることに注意してください)。.other
.get
.set
.custom
編集
特に、仕様に含まれている例に注意してください。
// the declaration of the property
.property int32 Count() {
.get instance int32 MyCount::get_Count()
.set instance void MyCount::set_Count(int32)
.other instance void MyCount::reset_Count()
}
これは、「リセット」がオプションであることを示唆しています。ただし、実際には、これは反射パターンを介して処理されます。だから:
public int Foo {get;set;}
のリセット方法は慣例ですが、コンパイラはこれをカスタムアクセサに処理しません。public void ResetFoo()
Foo
using System;
using System.ComponentModel;
public class MyType
{
public int Foo { get; set; }
public void ResetFoo() { Foo = 0; }
static void Main()
{
var obj = new MyType {Foo = 123};
TypeDescriptor.GetProperties(typeof(MyType))["Foo"].ResetValue(obj);
Console.WriteLine(obj.Foo); // outputs: 0
var accessors = typeof (MyType).GetProperty("Foo").GetAccessors();
// writes get_Foo and set_Foo
foreach(var acc in accessors) Console.WriteLine(acc.Name);
}
}