WriteOnly Eigenschaft oder Methode?

7

Gibt es ein bestimmtes Szenario, in dem eine Eigenschaft WriteOnly mehr Sinn macht als eine Methode? Der Methodenansatz fühlt sich für mich viel natürlicher an.

Was ist der richtige Ansatz?

Verwenden von Eigenschaften :

%Vor% %Vor%

Methoden verwenden :

%Vor% %Vor%

BEARBEITEN Nur um zu verdeutlichen, ich beziehe mich auf "WriteOnly" -Eigenschaften.

    
Micah 27.11.2008, 04:39
quelle

8 Antworten

10

Ich denke, eine Eigenschaft gibt etwas an, das schreibgeschützt oder schreibgeschützt sein kann. Das Verhalten einer schreibgeschützten Eigenschaft ist nicht offensichtlich, daher vermeide ich es, sie zu erstellen.

Als Beispiel können Sie eine Liste von Werten in einem Dropdown-Menü für eine Ansicht festlegen und auf das ausgewählte Element zugreifen:

%Vor%

Macht mehr Sinn als:

%Vor%     
Andrew Kennan 27.11.2008, 04:46
quelle
11

Die Microsoft Framework Design Guidelines (wie sie in ihrem FxCop-Tool enthalten sind) entmutigen Write-Only-Eigenschaften und kennzeichnen ihre Anwesenheit als ein API-Design-Problem aufgrund der Unintuitivität dieses Ansatzes.

    
Matt Campbell 27.11.2008 05:33
quelle
3
___ qstnhdr ___ WriteOnly Eigenschaft oder Methode? ___ qstntxt ___

Gibt es ein bestimmtes Szenario, in dem eine Eigenschaft %code% mehr Sinn macht als eine Methode? Der Methodenansatz fühlt sich für mich viel natürlicher an.

Was ist der richtige Ansatz?

Verwenden von Eigenschaften :

%Vor% %Vor%

Methoden verwenden :

%Vor% %Vor%

BEARBEITEN Nur um zu verdeutlichen, ich beziehe mich auf "WriteOnly" -Eigenschaften.

    
___ answer322950 ___

Ich denke, eine Eigenschaft gibt etwas an, das schreibgeschützt oder schreibgeschützt sein kann. Das Verhalten einer schreibgeschützten Eigenschaft ist nicht offensichtlich, daher vermeide ich es, sie zu erstellen.

Als Beispiel können Sie eine Liste von Werten in einem Dropdown-Menü für eine Ansicht festlegen und auf das ausgewählte Element zugreifen:

%Vor%

Macht mehr Sinn als:

%Vor%     
___ antwort323149 ___

Nur ein anderer Gedanke:
Eine Eigenschaft soll dasselbe wie ein Feld fühlen und schmecken . Es gibt keine Möglichkeit, ein Feld zu erstellen, das WriteOnly ist. ReadWrite ist möglich, ReadOnly (const) ist möglich, aber nicht WriteOnly. Inkonsistenz ist schlecht [tm]

    
___ answer322999 ___

Die Microsoft Framework Design Guidelines (wie sie in ihrem FxCop-Tool enthalten sind) entmutigen Write-Only-Eigenschaften und kennzeichnen ihre Anwesenheit als ein API-Design-Problem aufgrund der Unintuitivität dieses Ansatzes.

    
___ answer2332166 ___

Hier ist ein Beispiel von Code, den ich in einem XNA-Projekt verwendet habe. Wie Sie sehen, ist Skalieren schreibgeschützt, nützlich und (einigermaßen) intuitiv und eine Leseeigenschaft ( get ) würde keinen Sinn ergeben. Sicher könnte es mit einer Methode ersetzt werden, aber ich mag die Syntax.

%Vor%     
___ answer323007 ___

Ich bezweifle, dass es eine richtige Wahl gibt. Es ist Geschmackssache.

In beiden Szenarien verlieren Sie eine Kapselung. Ein Entwickler, der die Methode oder Eigenschaft verwendet, muss etwas über die interne Implementierung wissen, um das Ergebnis zu verstehen. Aus diesem Grund würde ich sie vermeiden, wenn es möglich ist, und sie sonst nur sparsam einsetzen.

Für mich empfehlen die Eigenschaften eine enge Verknüpfung mit einem privaten Mitglied mit möglichen Zugriffsregeln. Wenn Sie einfach ein sicheres privates Mitglied festlegen, verwende ich eine Property:

%Vor%

Wenn Ihr Set mehrere Mitglieder betrifft, würde ich mit der Methode gehen. Etwas wie:

%Vor%

Das Wichtigste ist Konsistenz.

    
___ answer323018 ___

Ich stimme Ihrer Vermutung zu: Verwenden Sie Methoden. Wie Sie aus einigen dieser Antworten sehen können, ist die Idee der Nur-Schreib-Eigenschaften eine Art seltsamer. SetInternalDataProperty () ist viel einfacher zu verstehen - und letztlich ist dies eine Frage, welcher Ansatz die geringste Verwirrung verursacht. Ich würde mit deinem Bauch gehen.

    
___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ tag123codingstyle ___ ** NICHT VERWENDEN! Dieser Tag bezieht sich auf ein völlig eigensinniges Thema und ist daher nicht mehr Thema. ** Fragen, die dem Programmierstil und den Konventionen folgen. ___ answer3335599 ___

Gemäß der Codeanalyse-Regel CA1044:

Get Accessoren bieten Lesezugriff auf eine Eigenschaft und Set-Accessoren bieten Schreibzugriff.

Die Designrichtlinien verbieten die Verwendung schreibgeschützter Eigenschaften. Der Grund dafür ist, dass ein Benutzer keinen Wert festlegen kann, wenn er einen Wert festlegt und dann verhindert, dass der Benutzer den Wert anzeigt. Auch ohne Lesezugriff kann der Status von gemeinsam genutzten Objekten nicht angezeigt werden, was ihre Nützlichkeit einschränkt.

Fügen Sie einen get-Zugriff auf die Eigenschaft hinzu.

Wenn das Verhalten einer Nur-Schreib-Eigenschaft erforderlich ist, können Sie diese Eigenschaft in eine Methode konvertieren.

Weitere Informationen finden Sie Ссылка

    
___ answer323138 ___

Allerdings habe ich gesehen, dass das .Net Framework selbst ReadOnly Properties verwendet. Das erste, was mir in den Sinn kommt, ist:

%Vor%

Dafür müssen Sie eine Methode zum Schreiben aufrufen:

%Vor%     
___
EricSchaefer 27.11.2008 07:43
quelle
3

Hier ist ein Beispiel von Code, den ich in einem XNA-Projekt verwendet habe. Wie Sie sehen, ist Skalieren schreibgeschützt, nützlich und (einigermaßen) intuitiv und eine Leseeigenschaft ( get ) würde keinen Sinn ergeben. Sicher könnte es mit einer Methode ersetzt werden, aber ich mag die Syntax.

%Vor%     
RAL 25.02.2010 06:43
quelle
2

Ich stimme Ihrer Vermutung zu: Verwenden Sie Methoden. Wie Sie aus einigen dieser Antworten sehen können, ist die Idee der Nur-Schreib-Eigenschaften eine Art seltsamer. SetInternalDataProperty () ist viel einfacher zu verstehen - und letztlich ist dies eine Frage, welcher Ansatz die geringste Verwirrung verursacht. Ich würde mit deinem Bauch gehen.

    
ojrac 27.11.2008 05:43
quelle
1

Ich bezweifle, dass es eine richtige Wahl gibt. Es ist Geschmackssache.

In beiden Szenarien verlieren Sie eine Kapselung. Ein Entwickler, der die Methode oder Eigenschaft verwendet, muss etwas über die interne Implementierung wissen, um das Ergebnis zu verstehen. Aus diesem Grund würde ich sie vermeiden, wenn es möglich ist, und sie sonst nur sparsam einsetzen.

Für mich empfehlen die Eigenschaften eine enge Verknüpfung mit einem privaten Mitglied mit möglichen Zugriffsregeln. Wenn Sie einfach ein sicheres privates Mitglied festlegen, verwende ich eine Property:

%Vor%

Wenn Ihr Set mehrere Mitglieder betrifft, würde ich mit der Methode gehen. Etwas wie:

%Vor%

Das Wichtigste ist Konsistenz.

    
Corbin March 27.11.2008 05:38
quelle
0

Gemäß der Codeanalyse-Regel CA1044:

Get Accessoren bieten Lesezugriff auf eine Eigenschaft und Set-Accessoren bieten Schreibzugriff.

Die Designrichtlinien verbieten die Verwendung schreibgeschützter Eigenschaften. Der Grund dafür ist, dass ein Benutzer keinen Wert festlegen kann, wenn er einen Wert festlegt und dann verhindert, dass der Benutzer den Wert anzeigt. Auch ohne Lesezugriff kann der Status von gemeinsam genutzten Objekten nicht angezeigt werden, was ihre Nützlichkeit einschränkt.

Fügen Sie einen get-Zugriff auf die Eigenschaft hinzu.

Wenn das Verhalten einer Nur-Schreib-Eigenschaft erforderlich ist, können Sie diese Eigenschaft in eine Methode konvertieren.

Weitere Informationen finden Sie Ссылка

    
Siddhanath Lawand 26.07.2010 14:11
quelle
-1

Allerdings habe ich gesehen, dass das .Net Framework selbst ReadOnly Properties verwendet. Das erste, was mir in den Sinn kommt, ist:

%Vor%

Dafür müssen Sie eine Methode zum Schreiben aufrufen:

%Vor%     
Mark Glorie 27.11.2008 07:36
quelle

Tags und Links