Mam pewien kod automatycznej instancji, który chciałbym zastosować do około 15 właściwości w dość dużej klasie. Kod jest podobny do następującego ale typ różni dla każdego wystąpienia:Ekwiwalent C# dla makr C++ i użycie Auto <> Właściwości
protected ComplexType _propertyName;
public ComplexType PropertyName
{
get
{
if (_propertyName == null) {
_propertyName = new ComplexType();
}
return _propertyName;
}
}
powtórzyć tę C++ (jak jest ~ 15 przypadki), to, że nie używane preprocesor makro ale I powiadomienie C# nie obsługuje ich.
Zastanawiam się, czy ktoś ma zalecenie, jak to zrobić w sposób czysty w C#?
Z mojego doświadczenia w C++, ogólnie uważam, że ustawienie wszystkiego jako "chronionego" nad "prywatnym" jest lepszym posunięciem, jeśli chcesz zachować swoją aplikację w przyszłości, nie rezygnując z ochrony członków. Rzadko używam prywatnego. – Ryall
@Kelix: Ale faktycznie rezygnujesz z ochrony użytkowników, zabezpieczając pola. Teraz każda klasa pochodna ma pełny dostęp do twoich pól.Jest to trochę podobne do posiadania pól publicznych, z tym wyjątkiem, że tylko klasy pochodne i nie wszystkie klasy mają dostęp do pól. –
@Martin: Tak, to jest pożądany efekt. Jeśli wyraźnie nie chcę zezwolić na dostęp w klasach pochodnych, zaznaczę to jako "chronione". Ogólnie rzecz biorąc, jeśli masz zamiar podjąć wysiłek wyprowadzenia klasy, będziesz chciał w jakiś sposób dodać lub zmienić zachowanie, więc dlaczego nie zapewnić nieograniczonego dostępu do tego? Oczywiście, gdyby był to ogólnodostępny interfejs (taki jak biblioteka klasy), wówczas "prywatny" byłby znacznie lepiej dopasowany. Po prostu nie lubię ograniczać dostępu tam, gdzie nie jest to konieczne. – Ryall