Warum kann ich in .NET keinen Standardkonstruktor für eine Struktur definieren?C#

Ein Treffpunkt für C#-Programmierer
Guest
 Warum kann ich in .NET keinen Standardkonstruktor für eine Struktur definieren?

Post by Guest »

In .NET kann ein Werttyp (C#-Struktur) keinen Konstruktor ohne Parameter haben. Laut diesem Beitrag ist dies durch die CLI-Spezifikation vorgeschrieben. Was passiert, ist, dass für jeden Werttyp ein Standardkonstruktor erstellt wird (vom Compiler?), der alle Mitglieder auf Null (oder null) initialisiert.

Warum ist es nicht zulässig, einen solchen Standardkonstruktor zu definieren?

Eine triviale Verwendung ist für rationale Zahlen:

Code: Select all

public struct Rational {
private long numerator;
private long denominator;

public Rational(long num, long denom)
{ /* Todo: Find GCD etc. */ }

public Rational(long num)
{
numerator = num;
denominator = 1;
}

public Rational() // This is not allowed
{
numerator = 0;
denominator = 1;
}
}
Bei Verwendung der aktuellen Version von C# ist ein Standard-Rational 0/0, was nicht so cool ist.

PS: Helfen Standardparameter bei der Lösung dieses Problems für C# 4.0 oder wird der CLR-definierte Standardkonstruktor aufgerufen?



Jon Skeet antwortete:


Um Ihr Beispiel zu verwenden: Was würde passieren, wenn jemand Folgendes tun würde:

Code: Select all

 Rational[] fractions = new Rational[1000];
Sollte es Ihren Konstruktor 1000 Mal durchlaufen?


Das sollte es auf jeden Fall , deshalb habe ich überhaupt den Standardkonstruktor geschrieben. Die CLR sollte den Konstruktor Standardnullung verwenden, wenn kein expliziter Standardkonstruktor definiert ist; Auf diese Weise zahlen Sie nur für das, was Sie nutzen. Wenn ich dann einen Container mit 1.000 nicht standardmäßigen Rationals möchte (und die 1.000 Konstruktionen wegoptimieren möchte), verwende ich eine List anstelle eines Arrays.

Dieser Grund ist meiner Meinung nach nicht stark genug, um die Definition eines Standardkonstruktors zu verhindern.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post