Definiera konstruktorer
Skapa instanser med parameteriserade konstruktorer.
Definiera konstruktorer är en gratis lektion i C# Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för C# Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i C# Academy innehåller totalt 4 lektioner.
Vad är en konstruktor?
En konstruktor är en särskild metod som körs när ett objekt skapas med new. Den har samma namn som klassen och ingen returtyp. Dess uppgift är att försätta objektet i ett giltigt starttillstånd.
using System;
class Dog
{
public Dog()
{
Console.WriteLine("A dog was created");
}
}
class Program
{
static void Main()
{
var d = new Dog();
}
}Parameteriserade konstruktorer
En konstruktor kan ta parametrar, så att den anropande koden anger initiala värden. Detta är det vanligaste mönstret för att ange nödvändiga data.
using System;
class Person
{
public string Name;
public int Age;
public Person(string name, int age)
{
Name = name;
Age = age;
}
}
class Program
{
static void Main()
{
var p = new Person("Ada", 36);
Console.WriteLine(p.Name + " is " + p.Age);
}
}Nyckelordet this i konstruktorer
När ett parameternamn överensstämmer med ett fältnamn används this. för att hänvisa till fältet och skilja det från parametern.
using System;
class Book
{
public string Title;
public Book(string title)
{
this.Title = title;
}
}
class Program
{
static void Main()
{
var b = new Book("C# Basics");
Console.WriteLine(b.Title);
}
}Standardkonstruktorn
Om ingen konstruktor skrivs tillhandahåller kompilatorn en parameterlös konstruktor. Så snart en konstruktor definieras försvinner dock standardkonstruktorn, om den inte läggs till manuellt.
using System;
class Empty
{
// No constructor written -> compiler supplies a default one
public int Value;
}
class Program
{
static void Main()
{
var e = new Empty();
Console.WriteLine("Default Value: " + e.Value);
}
}Validering i en konstruktor
En konstruktor kan validera sina argument och garantera att objektet aldrig skapas i ett ogiltigt tillstånd.
using System;
class Account
{
public decimal Balance;
public Account(decimal initial)
{
if (initial < 0)
throw new ArgumentException("Initial balance cannot be negative");
Balance = initial;
}
}
class Program
{
static void Main()
{
var a = new Account(100m);
Console.WriteLine("Balance: " + a.Balance);
}
}Överlagring av konstruktorer
En klass kan ha flera konstruktorer med olika parameterlistor. Kompilatorn väljer den som matchar argumenten som skickas.
using System;
class Point
{
public int X;
public int Y;
public Point()
{
X = 0;
Y = 0;
}
public Point(int x, int y)
{
X = x;
Y = y;
}
}
class Program
{
static void Main()
{
var origin = new Point();
var p = new Point(3, 4);
Console.WriteLine(origin.X + "," + origin.Y + " | " + p.X + "," + p.Y);
}
}Ange egenskaper från en konstruktor
Konstruktorer tilldelar ofta värden till automatiska egenskaper, inklusive egenskaper med endast init eller privata setters.
using System;
class Product
{
public string Name { get; }
public decimal Price { get; }
public Product(string name, decimal price)
{
Name = name;
Price = price;
}
}
class Program
{
static void Main()
{
var p = new Product("Pen", 1.50m);
Console.WriteLine(p.Name + ": " + p.Price);
}
}Standardvärden för parametrar
Konstruktionsparametrar kan ha standardvärden, så att de kan utelämnas vid anrop. Detta minskar ofta behovet av flera överlagrade konstruktorer.
using System;
class Circle
{
public double Radius;
public string Color;
public Circle(double radius, string color = "black")
{
Radius = radius;
Color = color;
}
}
class Program
{
static void Main()
{
var c1 = new Circle(2);
var c2 = new Circle(3, "red");
Console.WriteLine(c1.Color + " | " + c2.Color);
}
}Utföra arbete i en konstruktor
Utöver att tilldela fält kan en konstruktor beräkna härledda data eller förbereda resurser som objektet behöver.
using System;
class Rectangle
{
public double Width;
public double Height;
public double Area;
public Rectangle(double w, double h)
{
Width = w;
Height = h;
Area = w * h;
}
}
class Program
{
static void Main()
{
var r = new Rectangle(4, 5);
Console.WriteLine("Area: " + r.Area);
}
}Konstruktorer och obligatoriska data
Genom att placera obligatoriska värden i konstruktorn blir de nödvändiga: objektet kan inte skapas utan att de anges.
using System;
class User
{
public string Id;
public string Email;
public User(string id, string email)
{
Id = id;
Email = email;
}
}
class Program
{
static void Main()
{
var u = new User("u1", "a@b.com");
Console.WriteLine(u.Id + " / " + u.Email);
}
}Sätta ihop delarna
En väl utformad konstruktor validerar indata, tilldelar fält och lämnar objektet helt redo att användas.
using System;
class Temperature
{
public double Celsius { get; }
public double Fahrenheit { get; }
public Temperature(double celsius)
{
if (celsius < -273.15)
throw new ArgumentException("Below absolute zero");
Celsius = celsius;
Fahrenheit = celsius * 9 / 5 + 32;
}
}
class Program
{
static void Main()
{
var t = new Temperature(25);
Console.WriteLine(t.Celsius + "C = " + t.Fahrenheit + "F");
}
}Snabbkontroll
Testa er förståelse av konstruktorer.
Sammanfattning
En konstruktor har samma namn som klassen, saknar returtyp och körs vid new. Parameteriserade konstruktorer tar emot startvärden; this. skiljer fält från parametrar. Ni kan överlagra konstruktorer och använda standardvärden för parametrar. Om ni definierar en konstruktor tas den automatiskt genererade standardkonstruktorn bort.
using System;
class Demo
{
public string Name;
public Demo(string name = "anon")
{
this.Name = name;
}
}
class Program
{
static void Main()
{
Console.WriteLine(new Demo().Name);
Console.WriteLine(new Demo("Kai").Name);
}
}Lär dig C# med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 93
- Lektioner
- 346
Vanliga frågor
Är lektionen ”Definiera konstruktorer” gratis?
Ja – hela texten till ”Definiera konstruktorer” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i C# Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i C# Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Definiera konstruktorer”?
Skapa instanser med parameteriserade konstruktorer. Ni övar på C# Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig C# Academy?
Du behöver inga förkunskaper. Utbildningen i C# Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Definiera konstruktorer”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här C# Academy-lektionen?
Ja. Varje C# Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Definiera konstruktorer
- Konstruktorkedjor med this
- Objekt- och samlingsinitierare
- Statiska konstruktorer