Das ist premature optimization. Nimm das was lesbarer ist.
Quote:
Originally Posted by Logtetsch
Das man eine default-Implementierung vornehmen kann, war mir nicht bewusst, aber wäre es dann nicht sinnvoller einfach eine normale Klasse zunehmen, und die Methoden einfach virtuell zu kennzeichnen?
Was würde bei folgendem Szenario passieren? Wie sähe hier die Implementierung aus? Soviel ich weiß, ist eine Methoden-Überladung nur durch unterschiedliche Signaturen, welche den Rückgabetyp nicht berücksichtigt, gültig. Würde es hierbei zu einem Konflikt kommen und ich müsste auf ein Interface (ITest1 / ITest2) verzichten?
Code:
interface ITest1
{
int foo(int a, int b);
}
interface ITest2
{
void foo(int a, int b)
}
public sealed class CFoo : ITest1, ITest2
{
//........
}
Achja, bevor ich es vergesse: Sind alle Methoden, Eigenschaften und Felder automatisch statisch, wenn ich die Klasse mit dem static Modifizierer bestücke?
|
Wenn mehrere Interfaces die gleichen Methoden haben, ist das kein Problem. Es ist letztendlich nur ein Vertrag, der besagt, dass diese Methode vorhanden sein muss (Interfaces zu implementieren ist nicht dasselbe wie von einer abstrakten Klasse zu erben!). Wenn zwei Verträge die Methode fordern, erfüllst du trotzdem beide, auch wenn du die Methode nur einmal hast.
Bei Mehrfachvererbung wäre das nicht so einfach, aber die unterstützt C# ja nicht.
Wenn es übrigens keinen Grund für eine abstrakte Klasse oder überhaupt Vererbung gibt, ist ein Interface vorzuziehen. Kompositionen sind flexibler als Vererbung.
sealed solltest du übrigens ebenfalls nur verwenden, wenn du auch einen guten Grund dazu hast.
Nein,statische Klassen machen nicht automatisch alles statisch. Du musst die Sachen selbst als statisch deklarieren.
p.s.
[Only registered and activated users can see links. Click Here To Register...]
Optimal, wenn du dir solche Fragen stellst wie "Was ist wenn". Probieren geht über Studieren.