public class PhotoList : ObservableCollection<ImageFile>
{
public PhotoList() { }
**//this is the line that I dont recognise!!!!!!!!!!**
public PhotoList(string path) : this(new DirectoryInfo(path)) { }
public PhotoList(DirectoryInfo directory)
{
_directory = directory;
Update();
}
public string Path
{
set
{
_directory = new DirectoryInfo(value);
Update();
}
get { return _directory.FullName; }
}
public DirectoryInfo Directory
{
set
{
_directory = value;
Update();
}
get { return _directory; }
}
private void Update()
{
foreach (FileInfo f in _directory.GetFiles("*.jpg"))
{
Add(new ImageFile(f.FullName));
}
}
DirectoryInfo _directory;
}
Antwort
Dies wird Konstruktorverkettung genannt - Konstruktoren anderen Konstrukteuren mit dieser Syntax in der gleichen Art bezeichnen kann (this
für Geschwister Konstruktoren und base
für Basis Konstruktoren verwenden).
Hier ist ein einfaches Beispiel, das zeigt, wie es funktioniert:
using System;
class Program
{
static void Main()
{
Foo foo = new Foo();
}
}
class Foo
{
public Foo() : this("hello")
{
Console.WriteLine("world");
}
public Foo(String s)
{
Console.WriteLine(s);
}
}
Ausgang:
hello
world
Es macht den Konstruktor, der einen String Parameter ruft das auf Konstruktor, der einen DirectoryInfo-Parameter übernimmt und ein neues DirectoryInfo-Objekt (das wiederum die Zeichenfolge als Parameter verwendet) an ihn übergibt.
Ich verwende diesen Ansatz oft, um einfacheren Konstruktoren komplexe Klassen zur Verfügung zu stellen, wobei die Klasse selbst Eigenschaften mit Standardwerten initialisieren kann, ohne den Initialisierungscode duplizieren zu müssen.
Es ruft den anderen Konstruktor in der Klasse auf, die eine DirectoryInfo als Argument verwendet.
Mal sehen, wie der Aufrufer dieser Klasse
verwendet werden kann//The empty ctor()
PhotoList list = new PhotoList();
//The ctor that takes a DirectoryInfo
PhotoList list2 = new PhotoList(new DirectoryInfo("directory"));
//Would do the same as the code above since this constructor calls another constructor via the this() keyword
PhotoList list3 = new PhotoList("directory");
- 1. Was macht das Drucken einer leeren Zeile?
- 2. Was macht diese Schleife mit PHP $$ Syntax?
- 3. DataTemplate ein ViewModel mit einem nicht leeren Konstruktor?
- 4. XML hat leeren Körper?
- 5. Jsoup Rücksendeetikett mit leeren Körper
- 6. Was macht man am besten nicht in einem Konstruktor?
- 7. Was macht die Neubildung einer leeren Struktur in C#?
- 8. Was macht diese Funktion? Und was ist die seltsame Syntax?
- 9. Kopieren Objekteigenschaften Array mit einem leeren Körper-in-Schleife
- 10. Post leeren Körper mit Jersey 2 Client
- 11. Was macht ein IISReset?
- 12. stellen Sie sicher, Klassenname existiert, ist öffentlich und hat einen leeren Konstruktor für öffentliches Fragment mit Klassennamen und leeren Konstruktor
- 13. F # Konstruktor Syntax
- 14. OpenCL Konstruktor Syntax und Aktualisieren Variable
- 15. Möglich, ein funktionsähnliches Makro mit einem variablen Körper zu definieren?
- 16. Was macht die [SomeClass self] -Syntax?
- 17. PHPMailer Körper Nachricht leeren Fehler
- 18. Javascript Syntax mit [...] vor einem Funktionsaufruf/Konstruktor Anruf
- 19. Was macht ein i2c_new_dummy?
- 20. Try catch Syntax Konstruktor
- 21. Instancieren einer Klasse mit einem internen Konstruktor
- 22. Ist diese robots.txt-Syntax mit einem leeren "Disallow:" korrekt?
- 23. Was macht ein Gradlew?
- 24. Java-Konstruktor Syntax Ausgabe
- 25. Was macht ein splat-Operator, wenn er keinen Variablennamen hat?
- 26. F # -Konstruktor-Syntax - Überschreiben und Erweitern Neu
- 27. Was macht ein Feature und was für ein Szenario in Gurke und Gurke?
- 28. Was macht ein Hashset beim Initialisieren einer Sammlung mit Speicher?
- 29. Warum sendet fetch() einen leeren Körper?
- 30. macht Konsole Optionen mit Unterschrift Syntax erforderlich
dies auch noch nie gesehen. Zunächst scheint es sich um eine schlechte Design-Wahl zu handeln, da der aufrufende Code den verketteten Konstruktor nicht sieht. Kann falsch sein –
@Nick Allen Die Verkettung wird als internes (Implementierungs-) Problem der Klasse betrachtet, daher sollte der Aufrufer nicht wissen. Sie könnten zum Beispiel zwei öffentliche Konstruktoren haben, die an einen gemeinsamen privaten Konstruktor verketten – krosenvold