Galin Iliev

Software Architecture & Development

Автоматично изграждане на свойства

Едно от най-новите синтактични подобрения е автоматичното изграждане на свойства. Въпреки, че това не е радикално нововъведение е подходящо да му отделим малко внимание.

Когато създаваме класове добрият стил изисква всички полета/променливи да са капсулирани и маркирани като частни или защитени (private/protected). Ако съдържанието на някое поле трябва да бъде използвано от външни за класа методи, то трябва да се обвие в свойство. За свойства, които имат сложни getters и setters (напр. Преди са се върне стойността на полето се създава запис в лога) това е удобен начин да построим класа, но за останалите свойства е малко досадно да създаваме множество от подобни двойки поле/свойство:

private string fullName;

public string FullName

{

    get { return fullName; }

    set { fullName = value; }

}

Последното въведение в C# 3.0 позволява да съкратим кода, който пишем до:

public string FullName { get; set; }

и вече в методите на класа (а и извън тях) може да достъпваме декларираното свойство. По разбираеми причини вече не може да се объркаме и да използваме полето вместо свойството, както беше възможно в по-горният случай.

Нека обаче да погледнем какво е генерирал компилатора от този код :

[CompilerGenerated]

private string <>k__AutomaticallyGeneratedPropertyField0;

 

public string FullName{
    [CompilerGenerated]
    get{
        return this.<>k__AutomaticallyGeneratedPropertyField0;
    }
    [CompilerGenerated]
    set{
        this.<>k__AutomaticallyGeneratedPropertyField0 = value;
    }
}

 

С изключение на странното име на полето, останалата част изглежда така както я бихме написали сами.

Както виждате това само по себе си не е революционно нововъведение, но то би могло да съкрати кода, който пишем оставяйки ни повече време за мислене върху по-сериозни проблеми.

Както навярно сами се досещате, това може да бъде приложено само в свойства без допълнителна логика в getters и setters.

 

Следваща част: Разширяващи методи (Extension Methods)

Content