C# Language
Objektinitierare
Sök…
Syntax
- SomeClass sc = new SomeClass {Property1 = value1, Property2 = value2, ...};
- SomeClass sc = new SomeClass (param1, param2, ...) {Property1 = value1, Property2 = value2, ...}
Anmärkningar
Konstruktörparenteserna kan endast utelämnas om den typ som instanseras har en standard (parameterlös) konstruktör tillgänglig.
Enkel användning
Objektinitierare är praktiska när du behöver skapa ett objekt och ställa in ett par egenskaper direkt, men tillgängliga konstruktörer räcker inte. Säg att du har en klass
public class Book
{
public string Title { get; set; }
public string Author { get; set; }
// the rest of class definition
}
För att initiera en ny instans av klassen med en initialisering:
Book theBook = new Book { Title = "Don Quixote", Author = "Miguel de Cervantes" };
Detta motsvarar
Book theBook = new Book();
theBook.Title = "Don Quixote";
theBook.Author = "Miguel de Cervantes";
Användning med anonyma typer
Objektinitierare är det enda sättet att initialisera anonyma typer, som är typer som genereras av kompilatorn.
var album = new { Band = "Beatles", Title = "Abbey Road" };
Av den anledningen används objektinitierare ofta i LINQ-utvalsfrågor, eftersom de ger ett bekvämt sätt att specificera vilka delar av ett frågat objekt du är intresserad av.
var albumTitles = from a in albums
select new
{
Title = a.Title,
Artist = a.Band
};
Användning med icke-standardkonstruktörer
Du kan kombinera objektinitierare med konstruktörer för att initialisera typer vid behov. Ta till exempel en klass definierad som sådan:
public class Book {
public string Title { get; set; }
public string Author { get; set; }
public Book(int id) {
//do things
}
// the rest of class definition
}
var someBook = new Book(16) { Title = "Don Quixote", Author = "Miguel de Cervantes" }
Detta kommer först att instansera en Book
med Book(int)
-konstruktören och sedan ställa in varje egenskap i initialiseraren. Det motsvarar:
var someBook = new Book(16);
someBook.Title = "Don Quixote";
someBook.Author = "Miguel de Cervantes";