2016-07-19 6 views
0

Die Schnittstelle ist:Wie Aufzählungen in einer Klasse definieren Festhalten an einer Schnittstelle

public interface CommonPluginInterface 
{ 
    string GetPluginName(); 
    string GetPluginType(); 
    bool ElaborateReport(); 
} 

jetzt will ich alle abgeleiteten Klassen selbst durch einen String und eine Enumeration zu identifizieren. Für die Zeichenfolge ist es einfach für sie hart codiert ist:

public class PluginReport_Excel : MarshalByRefObject, CommonPluginInterface 
{ 
    public string GetPluginName() 
    { 
     return "Foo"; 
    } 
} 

aber zusätzlich möchte ich es auch durch eine Enumeration zu identifizieren. Also überlegte ich, ob ich die Schnittstelle einfügen sollte, aber die Schnittstelle kann keine Mitglieder enthalten.

Also dachte ich über

machen
public class CommonPluginClass 
{ 
    private enum ePluginType { UNKNOWN, EXCEL, EXCEL_SM, RTF} 
    private ePluginType pluginType; 
} 

und macht die abgeleitete Klasse ergeben sich auch aus, dass aber das ist nicht möglich, denn es heißt:

Class ‚PluginReport_Excel‘ nicht mehrere Basisklassen haben kann: "MarshalByRefObject" und "CommonPluginClass"

und ich brauche MarshalByRefObject. Danke für jede Hilfe.

+0

Werfen Sie einen Blick auf: http://stackoverflow.com/questions/313243/ –

Antwort

1

Definieren Sie ein Enum separat und definieren Sie es als Rückgabetyp für die GetPluginType-Methode.

public enum ePluginType 
{ 
    UNKNOWN, 
    EXCEL, 
    EXCEL_SM, 
    RTF 
} 

public interface CommonPluginInterface 
{ 
    string GetPluginName(); 
    ePluginType GetPluginType(); 
    bool ElaborateReport(); 
} 

public class PluginReport_Excel : MarshalByRefObject, CommonPluginInterface 
{ 
    public ePluginType GetPluginType() 
    { 
     return ePluginType.EXCEL; 
    } 

    //implement other interface members 
} 
1

Sie können eine Immobilie an der Schnittstelle mit dem enum's-Typ:

public interface CommonPluginInterface 
{ 
    string GetPluginName(); 
    bool ElaborateReport(); 
    ePluginType PluginType { get; } 
} 

Nun sind alle implementierenden Klassen haben auch entsprechend die Eigenschaft festzulegen. Sie haben die Aufzählung jedoch öffentlich gemacht.

public class PluginReport_Excel : MarshalByRefObject, CommonPluginInterface 
{ 
    public string GetPluginName() 
    { 
     return "Foo"; 
    } 
    public PluginType { get { return ePluginType.Excel; } } 
} 

Alternativly, wenn Sie die GetPluginType verwenden möchten -Methode Sie einfach den Aufzählungen Wert Zeichenfolge konvertieren kann:

public class PluginReport_Excel : MarshalByRefObject, CommonPluginInterface 
{ 
    public string GetPluginName() 
    { 
     return "Foo"; 
    } 
    public string GetPluginType() 
    { 
     return this.PluginType.ToString(); 
    } 
    public PluginType { get { return ePluginType.Excel; } } 
} 
1

Wie wäre es ein MarshalByRefCommonPluginClass erstellen?

public class MarshalByRefCommonPluginClass : MarshalByRefObject 
{ 
    private enum ePluginType { UNKNOWN, EXCEL, EXCEL_SM, RTF} 
    private ePluginType pluginType; 
} 

Als beiseite, würde naming conventions normalerweise mittlere Schnittstellen ‚ich‘ Präfix (ICommonPlugin) und Typen würden Großbuchstaben (EPluginType).

Verwandte Themen