2016-08-25 3 views
0

Ich habe einen privaten Typ, der in dem Konstruktor instanziiert werden sollte. Ich habe einen Basiskonstruktor und einen anderen mit Parametern. Ich habe Instanziierung in der Basis und nur die Variablenzuweisung im parametrisierten Konstruktor beibehalten. Aber es funktioniert nicht.Basiskonstruktor, der nicht ausgeführt wird

Dies funktioniert nicht.

public class MainClass 
{ 
    private MyType myType = null; 
    private string myParm = string.Empty; 

    private MainClass() 
    { 
     myType = new MyType(); 
    } 

    public MainClass(string inParm) : base() 
    { 
     myParm = inParm; 
    } 
} 

Die unten arbeitet,

public class MainClass 
{ 
    private MyType myType = null; 
    private string myParm = string.Empty; 

    private MainClass() 
    { 
    } 

    public MainClass(string inParm): base() 
    { 
     myType = new MyType(); 
     myParm = inParm; 
    } 
} 

myType nicht initialisiert wird, wenn in Basiskonstruktor gehalten

+0

'base()' ist der Konstruktor von einer übergeordneten Klasse für den Aufruf, die 'object' für diese Klasse ist. 'object' weiß nichts über' myType'. Wahrscheinlich suchst du stattdessen 'this()'. –

+0

Ich verstehe jetzt. Danke für die Erklärung – Sekar

Antwort

7

Sie this() nicht base(). Sie wollen den Konstruktor auf der gleichen Klasse nennen, nicht seine Basisklasse:

public MainClass(string inParm) : this() 
{ 
    myParm = inParm; 
} 

standardmäßig eine Klasse wird seine Basisklasse Standardkonstruktors nennen, da es sich um eine Anforderung selbst zu konstruieren ist. Wenn für die Basisklasse kein Standardkonstruktor vorhanden ist, müssen Sie die korrekten Parameter angeben, um die Konstruktion der Basisklasse zu erfüllen.

Aber Ihre Basisklasse ist Object, also brauchen Sie sich keine Sorgen zu machen.

+0

Danke, es hat funktioniert. – Sekar

3

Sie haben this() nicht base() nennen, weil Sie nicht den übergeordneten Konstruktor aufrufen:

public class MainClass 
{ 
    private MyType myType = null; 
    private string myParm = string.Empty; 

    private MainClass() 
    { 
     myType = new MyType(); 
    } 

    public MainClass(string inParm) 
     : this() 
    { 
     myParm = inParm; 
    } 
} 
+0

Danke, es hat funktioniert – Sekar

Verwandte Themen