2010-11-19 9 views
5

Ich frage mich, ob ich Erweiterungsmethode oder andere Techniken verwenden kann, um statische Klasse wie System.Net.Mime.MediaTypeNames.Image zu erweitern, hat es weniger Typ als ich brauche.Erweiterungsmethode zur Erweiterung der statischen Klasse

+0

Sie können statische Klassen nicht erweitern; Suchen Sie nach SO für Duplikate dieser Frage und Sie werden einige Problemumgehungen sehen. – BeemerGuy

+0

Warum würden Sie das jemals brauchen? Die statische Klasse hat keinen Kontext, und was auch immer Sie in einer statischen Klasse tun können, könnte "irgendwo" anders im Code erfolgen. –

+0

@Amby - Ich denke, dass Sie es nur für organisatorische Zwecke tun möchten. Sicher könntest du eine statische ImageUtility-Klasse mit den notwendigen Methoden erstellen (was er laut dieser Antwort sowieso tun muss), aber ich denke, der OP möchte seinen Code so organisieren, dass er die zusätzliche Klasse nicht benötigt . Leider kannst du nicht. (Ich kam hierher, um das Gleiche zu tun). – MattW

Antwort

6

Nein, Erweiterungsmethoden können nur zum Hinzufügen von Instanzmethoden, nicht von statischen Methoden (oder sogar Eigenschaften) verwendet werden. Erweiterungsmethoden sind wirklich nur syntaktische Zucker um statische Methoden. Zum Beispiel, wenn Sie eine Erweiterungsmethode wie Count() verwenden:

var list = GetList(); 
var size = list.Count(); 

Dies wird kompiliert tatsächlich:

var list = GetList(); 
var size = Enumerable.Count(list); 

Sie können nicht hinzufügen zusätzliche statische Methoden zu einer vorhandenen Klasse mit Erweiterungsmethoden .

+0

Ist es korrekt zu sagen, dass "Erweiterungsmethoden nur zum Hinzufügen von Instanzmethoden verwendet werden können"? Wie Sie erklären, erscheinen sie nur als Instanzmethoden. Sie sind keine Instanzmethoden oder Sie können auf nicht öffentliche Mitglieder der Klasse zugreifen. –

0

Nein, das ist in C# noch nicht möglich, aber hoffentlich wird es irgendwann so werden. Und Sie können keine statische Klasse ableiten und neue Methoden auf diese Weise hinzufügen, da statische Klassen von object abgeleitet werden müssen. Eine Sache, die Sie tun können, die einen ziemlich ähnlichen Effekt in Ihrem Code hervorbringt, ist einfach eine andere statische Klasse zu deklarieren, die Sie stattdessen benutzen werden, wenn Sie Ihre Erweiterungsmethoden wollen. Zum Beispiel:

public static class MessageBox2 
{ 
    public static DialogResult ShowError(string Caption, string Message, params object[] OptionalFormatArgs) 
    { 
     return MessageBox.Show(string.Format(Message, OptionalFormatArgs), Caption, MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

Da die ursprüngliche Klasse statisch ist, per Definition des „Erweiterung“ -Methode muss nicht eine Instanz als this Parameter empfangen und einfach statische Methoden der ursprünglichen Klasse verwenden kann.

Verwandte Themen