2009-05-14 15 views
5

Podczas czytania artykułu Jona Skeeta na temat fields vs properties wspomina on, że zmiana pól na właściwości jest przełomową zmianą.Zmiana pól na właściwość jest przełomową zmianą w jakich scenariuszach?

Chciałbym zrozumieć typowe scenariusze, w których ta zmiana może powodować przerwy. Wraz ze scenariuszem, jeśli możesz, podaj wszelkie szczegóły.

Na początek, poniższe punkty zostały wymienione w innym miejscu:

  • Nie można zmienić pola do właściwości jeśli używasz odbicie od klasy. Jest to oczywiste, mimo że nie mam szczegółów. Serializacja jest jednym scenariuszem, w którym odbicie jest używane do iteracji nad obiektem, a zmiana pól na właściwości przerwie serializator lub zmieni dane wyjściowe. Nie można łatwo powiązać pól. (Dlaczego to jest? Czytam to: here)

  • ???

EDIT: Robert ma obszerną listę powodów wyboru properties over fields, a także wyjaśnia, jak przełączanie między nimi może spowodować rozerwanie zmiany.

Odpowiedz

5

Właściwości mogą rzutować dowolne wyjątki, podczas gdy pola nie mogą (przynajmniej gdy kompilator wie o przypisaniu pól w czasie kompilacji).

2

Co najmniej w Windows Forms można tylko powiązać ze sobą dane takie jak DataGridViewColumns z właściwościami w obiektach biznesowych, a nie z polami. Jeśli więc twoja klasa była używana jako DataSource dla siatki, jej właściwości zmieniające się na pola spowodowałyby kilka nowych błędów dla właściciela siatki.

9

Jeśli masz publiczne pole, a inny zespół ma kod, który go używa, to będzie trzeba go zrekompilować.

Definicja łamania IOW obejmuje "trzeba będzie zrekompilować".

1

Możesz przekazać pole jako parametr ref lub out lub zabrać jego adres w niebezpiecznym kontekście, podczas gdy nie możesz zrobić tego za pomocą właściwości.

Powiązane problemy