.NET i takie tam

Partial Methods

leave a comment »

Codziennie można nauczyć się czegoś nowego. Dzisiaj odkryłem, że w .NET nie tylko klasy mogą być określane, jako partial, ale również metody. Wygląda to tak:

partial class Account
{
    private decimal _balance;

    public string Balance
    {
        get { return _balance; }
        set
        {
            OnBalanceChanging(value);
            _balance = value;
            OnBalanceChanged();
        }
    }

    partial void OnBalanceChanging(decimal balance);
    partial void OnBalanceChanged();
}

I klasa implementująca metody OnBalanceChanging i OnBalanceChanged:

partial class Account
{
    partial void OnBalanceChanging(decimal balance)
    {
        // do sth
    }

    partial void OnBalanceChanged()
    {
        // do sth
    }
}

Proste przejrzyste i przypominające eventy, prawda? Przykład wykorzystania można znaleźć np. w klasach generowanych przez Entity Framework 4.

Dokumentacja podaje zasady korzystania z partial methods (ciekawe jak by to przetłumaczyć metody cząstkowe, częściowe)?

· metoda musi być oznaczona słowem kluczowym partial i musi być private

· musi zwracać void

· metoda może mieć parametry oznaczone, jako ref, ale już nie, jako out (pewnie, dlatego, że niemożna zagwarantować, że zmienną oznaczoną, jako out zainicjujemy, co jest wymagane przy wykorzystaniu tego modyfikatora)

· metoda może być oznaczona, jako static bądź unsafe

Jeśli zdefiniujemy metodę partial, ale jej nie zaimplementujemy, kompilator po prostu usunie referencję do niej. Niestety, jeśli postąpimy na odwrót tj. będziemy mieli implementację a brak będzie jej definicji, kompilator zgłosi wyjątek.

Written by sakowicz

Luty 28, 2011 @ 11:48 pm

Napisane w .NET

Tagged with , , ,

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d bloggers like this: