wiem, że kiedy używamy właściwości w języku C#, kompilator zawsze wygenerowania pobierające i ustawiające dla nich w MSIL (tj get_PropertyName i set_PropertyName), na przykład, rozważmy następujący fragment kodu:Czy właściwości C# zawsze mają pola kopii zapasowych "za sceną"?
class Program
{
class Test
{
public string Name { get; set; }
}
static void Main(string[] args)
{
//Here I'm using reflection to inspect methods of Test class
Type type = typeof(Test);
foreach (var item in type.GetMethods())
{
Console.WriteLine(item.Name);
}
}
}
Ten program wytworzy wyjście za pomocą metod z Test
, wśród których będą get_Name
i set_Name
- getter i setery, o których mówiłem. W moim rozumieniu, jeśli setery pobierające i ustawiające są tworzone "za kulisami", wówczas powinno również istnieć pole kopii zapasowej, z którego/do którego pobierają i ustawiają wartości pobierające i ustawiające. Tak, jak w poprzednim przykładzie, mogę użyć refleksji do wglądu pola dla klasy Test tak:
static void Main(string[] args)
{
Type type = typeof(Test);
foreach (var item in type.GetFields())
{
Console.WriteLine(item.Name);
}
}
ouput tego programu jest pusta, zakładam, to dlatego, że pole kopii zapasowej utworzony ma private
dostęp, więc nie możemy go zobaczyć. Ale ponieważ nie wiem, jak to sprawdzić, proszę dać mi znać, czy pole tworzenia kopii zapasowych zawsze zostanie utworzone (nawet jeśli mamy prostą właściwość z tylko get;
i)?
O ile wiem, że tak. – Alex
Po to, aby łatwiej znaleźć inne materiały referencyjne: są one zwykle znane jako * pola * cofania *, a nie * pola kopii zapasowych *. –
Zabawne, że funkcja dodana w późniejszych wersjach C# przyćmił ich główne zastosowanie. – IllidanS4