7

Gibt es eine Möglichkeit, die Verwendung des Schlüsselworts "dynamic" in .net 4 zu deaktivieren?C# - Dynamisches Schlüsselwort deaktivieren

Ich dachte, die Code-Analyse-Funktion von VS2010 könnte eine Regel haben, um den Build fehlschlagen, wenn das dynamische Schlüsselwort verwendet wird, aber ich konnte nicht eine fein.

+7

Warum? Es gibt nichts Böses an der Dynamik. –

+11

Versuchen Sie dies in der Regel in einem Team von Entwicklern durchzusetzen? In diesem Fall schlage ich zwei Werkzeuge vor: Grep und Cricket Fledermaus. –

+0

Cricket Fledermaus? Komm schon, Viehtreiber sind viel effektiver. http://www.enasco.com/product/C13638N –

Antwort

5

Es ist Teil der C# 4.0 Sprache, also nicht wirklich.

Sie können FXCop verwenden, um es jedoch zu suchen und den Build fehlschlagen, wenn es darauf stößt.

Stil Polizist könnte stattdessen arbeiten:

http://code.msdn.microsoft.com/sourceanalysis

Hier ist ein Link zu dem gleichen Thema zu reden und wie Stil Polizist könnte die Antwort sein. Es gibt auch einen Post darüber, wie FX Cop möglicherweise nach dem dynamischen Keyword sucht, obwohl es nicht perfekt ist.

http://social.msdn.microsoft.com/Forums/en/vstscode/thread/8ce407ba-bdf7-422b-bbcd-ca4701c3a76f

+0

Ich werde das versuchen. – chief7

+0

stellt sich heraus, dass FxCop dynamische Felder auf Klassenebene, Methodenparameter und Methoden über das DynamicAttribute finden kann, aber keine lokalen Variablen in Methoden b/c findet, die in Objekte ohne Attribut konvertiert werden. – chief7

+0

@ cheif7 Ich habe etwas mehr suchen und Stil Polizist könnte der Weg sein. Ich habe einen Link zu einigen Posts zum selben Problem gepostet. – kemiller2002

2

Ziel .net 1.0? :-)

Oder Codeüberprüfungen durchführen.

(Oder, um weniger facetious, sollte es ziemlich einfach sein, eine benutzerdefinierte FxCop oder CA zu schreiben Regel Verwendung dynamischer zu nicht erlauben)

Würden Sie nicht gerade jetzt für ein C++ Makro rechts töten? :-)

+0

#define dynamic object definieren –

2

Das dynamische Schlüsselwort ist nicht böse, aber es könnte sein.

Es führt zu Codefehlern, die Sie nur zur Laufzeit finden können. Dies sollte unter allen Umständen vermieden werden. Laufzeitfehler sind schlecht. Fehler bei der Kompilierungszeit sind gut.

Sie könnten so etwas wie das Folgende verwenden, um Ihre eigenen Standards festzulegen.

+2

Reflection macht das auch. Niemand verbietet jedoch Reflektion, es ist nur irgendwie verstanden, dass es ein sehr spezifisches Werkzeug für einen sehr spezifischen Job ist, und manchmal sind der Perf-Treffer und der Mangel an Kompilierzeit-Fehlern es wert, denn es gibt buchstäblich keinen anderen Weg, um sicher zu sein Arten von Dingen. Dito mit Dynamik. Sie standardmäßig überall zu verwenden ist schwachsinnig, aber gleichzeitig gibt es bestimmte Arten von Dingen, bei denen sich der Kompromiss lohnt. –

+0

Das Lesen von Dateien von der Festplatte, die möglicherweise ungültig sind, oder die Annahme, dass Registrierungs- oder Konfigurationsdateien vorhanden sind usw., wird auch "nur zur Laufzeit gefunden". :-) –

2

Entfernen Sie den Verweis auf , und ich denke, möglicherweise alle Verwendungen von dynamic wird nicht kompilieren.

1

Ich bin mir nicht sicher, ich verstehe, was diese irrationale Angst vor dem dynamischen Keyword ist. Es gab diese Art von Hysterie über anonyme Variablen und das var-Schlüsselwort für .NET 3.5, außer dass dies nur idiotisch war, da es sich um legitime statisch definierte Typen handelt.

Das dynamische Schlüsselwort dient einem hoch spezialisierten Zweck, ich sehe nicht, warum irgendeine Person den Wunsch haben würde, es zu verwenden, ohne zu verstehen warum. Das Beenden dieses Problems könnte jedoch durch ein Teamtreffen gelöst werden, in dem einige der neuen Funktionen von .NET 4 einschließlich des dynamischen Schlüsselworts erläutert werden. Ich nehme an, Sie sind eher ein Senior oder der Senior Lead des Teams; Es sollte ziemlich einfach sein, Ihrem Team zu sagen, ob sie jemals das Gefühl haben, das dynamische Keyword zu benutzen, um SIE ZUERST zu sehen.

Dies war genau die Anweisungen, die ich meinem Team gab, da ich es unwahrscheinlich finde, dass wir jemals das dynamic-Schlüsselwort verwenden werden, weil wir keine COM-Interop-Aktivität schreiben. Und darüber hinaus werde ich jede Art von dynamischem Proxy-Einsatz auf eine etablierte Bibliothek wie Linfu oder Castle verschieben und die Implementierung von dynamischen Proxies für sie zurücklassen, um das dynamische Schlüsselwort zu verwenden oder nicht.

+0

Ich glaube, dass dynamische für mehr als com interop .... – Amir