2010-06-03 8 views
8

To pytanie jest związane, ale nie taka sama jak ta: How do you give a C# Auto-Property a default value?W języku C# czy mogę spowodować, że auto-własność wykona dodatkową pracę przy pomocy atrybutu?

Kocham automatyczne właściwości, ale czasami muszę zrobić coś takiego:

private string someName; 

public string SomeName 
{ 
    get 
    { 
     return someName; 
    } 

    set 
    { 
     someName = value.Trim(); 
    } 
} 

Gdybym musiał zrobić to samo wiele Czasem zaczynam żałować, że nie muszę wpisywać tylu linii/znaków kodu. Chcę być w stanie przechwycić wartość i zmienić ją w następujący sposób:

public string Somename 
{ 
    get; 

    [Trim] 
    set; 
} 

Czy istnieje sposób na zrobienie czegoś takiego? Czy to byłoby głupie? Czy istnieje lepszy sposób? Jakieś inne ogólne uwagi? Przyznaję, że podany przeze mnie przykład jest nieco hipotetyczny i nie mogę znaleźć dokładnego kodu, który sprawił, że o tym pomyślałem.

Dzięki.

Odpowiedz

4

Możesz to zrobić za pomocą AOP, tak jak w przypadku Postsharp, ale dlaczego nie używasz w tym przypadku magazynu kopii zapasowych?

Również pod względem kompletności, należy prawdopodobnie to zrobić:

someName = (value ?? string.Empty).Trim(); 

obsłużyć null również.

Pamiętaj, że jeśli masz konkretny przypadek w umyśle, gdzie jest więcej prac, powinieneś poprosić o tej sprawie, a nie trywialne jedna masz w swoim pytaniu

+0

Dzięki, nie Microsoft zapewniają własne rozwiązania do programowania zorientowanego na aspekt? –

+0

Do pewnego stopnia z obiektem ContextBound, ale nie jest to bardzo dobre rozwiązanie dla większości implementacji AOP. Tkacze IL są obecnie znacznie lepsi i mogą pracować z dowolnym typem obiektów, podczas gdy przy użyciu metody Microsoft musisz dziedziczyć po wspólnej klasie. –

+0

Czekaj, "tkacz IL" to coś, co rozszerza cukier składniowy na inny kod? Czy jest to podobne do 'try/finally', koduje magiczne zaklęcie? Sądzę, że błąd w tkaczu IL będzie nieco trudny do wykrycia, ponieważ może to zmylić debuggera. –

5

Nie ma sposobu, aby to zrobić. Właściwości auto C# mają być cukrem syntaktycznym tylko dla najbardziej banalnych właściwości i nic więcej.

Powiązane problemy