StackOverflowException bei Vererbung
-
Hallo!
Ich wollte ein sehr simples Framework für Managed DirectX 2.0 schreiben.
Dazu hatte ich mir überlegt, eine generische abstrakte Basisklasse Device zu erstellen, um die ganzen Devices von Microsoft (Sound, Graphik usw.) besser kontrollieren zu können.Das hier ist der Code:
using System; namespace Last { abstract class Device<Type> { public Device(IntPtr handle) { Handle = handle; } public abstract void Dispose(); public Type DirectXDevice { get { return(DirectXDevice); } protected set { DirectXDevice = value; // Hier wirds gleich haarig. } } protected bool deviceLost = false; protected IntPtr Handle; } }
Nun habe ich mein GraphicDevice davon erben lassen, der Typ der GraphicDeviceklasse ist "Microsoft.DirectX.Direct3D.Device".
Somit müsste ja die Variable aus meiner DeviceBasisklasse "DirectXDevice" in dieser abgeleiteten GraphicDevice-Klasse vom Typ "Microsoft.DirectX.Direct3D.Device" sein.Oder liegt hier schon der Fehler!?
Wenn ich diese Variable jetzt nämlich im Konstruktor so benutze:
DirectXDevice = new Microsoft.DirectX.Direct3D.Device(0, DeviceType.Hardware, Handle, flags, presentParams);
Dann knallts:
**
An unhandled exception of type 'System.StackOverflowException' occurred in test.exe**Mein Visual Studio zeigt mir dazu folgendes Codezeile (die von oben aus der abstrakten Basisklasse):
DirectXDevice = value; // Hier wirds gleich haarig.
Deklariere ich diese Variable direkt in der abgeleiteten Klasse, sprich ich vererbe sie nicht mehr, funktionierts... wo ist mein Fehler?
-
Na schau doch mal genau hin - du rufst im setter den setter immer wieder selber auf. Du musst entweder ne Zuweisung an eine variable machen oder den setter der Basisklasse aufrufen.
-
Optimizer schrieb:
Na schau doch mal genau hin - du rufst im setter den setter immer wieder selber auf. Du musst entweder ne Zuweisung an eine variable machen oder den setter der Basisklasse aufrufen.
Hm danke sehr.
Ich steige gerade von C++ nach C# um, ich dachte wenn man das so deklariert, legt er automatisch zu den get und set methoden die variable an...