0Pricing
C# Academy · Ders

this ile Oluşturucu Zincirleme

Oluşturucular arasında başlatma mantığını yeniden kullanın.

this ile Oluşturucu Zincirleme, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.

Oluşturucular Neden Zincirlenir

Birden çok oluşturucu aynı kurulum mantığını paylaştığında, birinin diğerini çağırması için onları zincirleyebilirsiniz. Böylece kodu yinelemekten kaçınır ve başlatma işlemlerini tek bir yerde tutarsınız.

using System;

class Box
{
    public int Width;
    public int Height;

    public Box(int width, int height)
    {
        Width = width;
        Height = height;
    }

    public Box() : this(1, 1) { }
}

class Program
{
    static void Main()
    {
        var def = new Box();
        Console.WriteLine(def.Width + "x" + def.Height);
    }
}

: this(...) Sözdizimi

Zincirleme, oluşturucu imzasından sonra : this(args) kullanılarak yapılır. Hedef oluşturucu önce çalışır, ardından geçerli gövde çalışır.

using System;

class Person
{
    public string Name;
    public int Age;

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
        Console.WriteLine("Full constructor ran");
    }

    public Person(string name) : this(name, 0)
    {
        Console.WriteLine("Name-only constructor ran");
    }
}

class Program
{
    static void Main()
    {
        var p = new Person("Sam");
        Console.WriteLine(p.Name + ", " + p.Age);
    }
}

Çalışma Sırası

Zincirlenen oluşturucu, onu çağıran oluşturucunun gövdesinden önce çalışır. Bu, temel kurulumun önce yapılmasını garanti eder.

using System;

class Step
{
    public Step(int n)
    {
        Console.WriteLine("Init with " + n);
    }

    public Step() : this(0)
    {
        Console.WriteLine("Then default body");
    }
}

class Program
{
    static void Main()
    {
        var s = new Step();
    }
}

Tek Doğruluk Kaynağı

Tüm oluşturucuları, asıl mantığı içeren tek bir "ana" oluşturucuya yönlendirin. Diğerleri yalnızca varsayılan değerleri sağlar ve ona zincirlenir.

using System;

class Connection
{
    public string Host;
    public int Port;

    public Connection(string host, int port)
    {
        Host = host;
        Port = port;
    }

    public Connection(string host) : this(host, 8080) { }
    public Connection() : this("localhost", 8080) { }
}

class Program
{
    static void Main()
    {
        var c = new Connection("example.com");
        Console.WriteLine(c.Host + ":" + c.Port);
    }
}

Varsayılanlarla Zincirleme

Zincirleme, katmanlı varsayılanları ifade etmenin temiz bir yoludur: her kısa oluşturucu bir varsayılan değeri daha doldurur ve işlemi devreder.

using System;

class Coffee
{
    public string Size;
    public bool Milk;
    public int Sugar;

    public Coffee(string size, bool milk, int sugar)
    {
        Size = size;
        Milk = milk;
        Sugar = sugar;
    }

    public Coffee(string size, bool milk) : this(size, milk, 0) { }
    public Coffee(string size) : this(size, false) { }
}

class Program
{
    static void Main()
    {
        var c = new Coffee("large");
        Console.WriteLine(c.Size + ", milk=" + c.Milk + ", sugar=" + c.Sugar);
    }
}

Hedefte Doğrulama

Her oluşturucu ana oluşturucu üzerinden yönlendirildiği için, oraya yazılan doğrulama tüm oluşturma yollarını korur.

using System;

class Rect
{
    public int W;
    public int H;

    public Rect(int w, int h)
    {
        if (w <= 0 || h <= 0)
            throw new ArgumentException("Dimensions must be positive");
        W = w;
        H = h;
    }

    public Rect(int side) : this(side, side) { }
}

class Program
{
    static void Main()
    {
        var square = new Rect(5);
        Console.WriteLine(square.W + "x" + square.H);
    }
}

Zincirleme ile Varsayılan Parametrelerin Karşılaştırılması

Varsayılan parametreler birçok aşırı yüklemenin yerini alabilir; ancak her oluşturucunun gövdesinde biraz farklı bir mantık gerektiğinde zincirleme daha açıktır.

using System;

class Logger
{
    public string Prefix;
    public bool Verbose;

    public Logger(string prefix, bool verbose)
    {
        Prefix = prefix;
        Verbose = verbose;
    }

    public Logger(string prefix) : this(prefix, false)
    {
        Console.WriteLine("Created quiet logger");
    }
}

class Program
{
    static void Main()
    {
        var log = new Logger("APP");
        Console.WriteLine(log.Prefix + " verbose=" + log.Verbose);
    }
}

Boş Gövdeler Yaygındır

Bir zincirleme oluşturucunun gövdesi çoğu zaman boştur; çünkü tüm iş hedef oluşturucuda yapılır ve gövde { } biçiminde kalır.

using System;

class Vector
{
    public double X, Y, Z;

    public Vector(double x, double y, double z)
    {
        X = x; Y = y; Z = z;
    }

    public Vector(double v) : this(v, v, v) { }
}

class Program
{
    static void Main()
    {
        var v = new Vector(2);
        Console.WriteLine(v.X + "," + v.Y + "," + v.Z);
    }
}

Döngülerden Kaçınma

Oluşturucular bir döngü içinde zincirlenmemelidir (A, B'yi; B de A'yı çağırır). Derleyici, döngüsel : this(...) zincirlerini reddeder.

using System;

class Safe
{
    public int A, B;

    public Safe(int a, int b)
    {
        A = a;
        B = b;
    }

    public Safe(int a) : this(a, 0) { }   // chains one direction only
}

class Program
{
    static void Main()
    {
        var s = new Safe(7);
        Console.WriteLine(s.A + ", " + s.B);
    }
}

this.field ile Birleştirme

Zincirleme yaparken, hedef oluşturucu döndükten sonra ek kurulum işlemleri için gövdede this. kullanmaya devam edebilirsiniz.

using System;

class Account
{
    public string Owner;
    public decimal Balance;
    public bool Active;

    public Account(string owner, decimal balance)
    {
        this.Owner = owner;
        this.Balance = balance;
    }

    public Account(string owner) : this(owner, 0m)
    {
        this.Active = true;
    }
}

class Program
{
    static void Main()
    {
        var a = new Account("Rin");
        Console.WriteLine(a.Owner + " active=" + a.Active);
    }
}

Hepsini Birleştirme

Zincirleme bir sınıfı DRY tutar: bir oluşturucu doğrular ve atama yapar; diğerleri kullanışlı kısayollar sağlar.

using System;

class Pizza
{
    public string Size;
    public int Toppings;

    public Pizza(string size, int toppings)
    {
        if (toppings < 0) throw new ArgumentException("toppings");
        Size = size;
        Toppings = toppings;
    }

    public Pizza(string size) : this(size, 0) { }
    public Pizza() : this("medium") { }
}

class Program
{
    static void Main()
    {
        var p = new Pizza();
        Console.WriteLine(p.Size + " with " + p.Toppings + " toppings");
    }
}

Hızlı Kontrol

Oluşturucu zincirleme hakkındaki anlayışınızı sınayın.

Özet

Oluşturucu zincirleme, aynı sınıftaki başka bir oluşturucuyu çağırmak için : this(args) kullanır. Hedef önce çalışır, ardından geçerli gövde çalışır. Doğrulamayı merkezileştirmek ve yinelenen kurulumu önlemek için her oluşturucuyu tek bir ana oluşturucu üzerinden yönlendirin. Döngüsel zincirlere izin verilmez.

using System;

class Demo
{
    public int X, Y;
    public Demo(int x, int y) { X = x; Y = y; }
    public Demo(int both) : this(both, both) { }
}

class Program
{
    static void Main()
    {
        var d = new Demo(4);
        Console.WriteLine(d.X + "," + d.Y);
    }
}

Sıkça Sorulan Sorular

“this ile Oluşturucu Zincirleme” dersi ücretsiz mi?

Evet — “this ile Oluşturucu Zincirleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.

“this ile Oluşturucu Zincirleme” dersinde ne öğreneceğim?

Oluşturucular arasında başlatma mantığını yeniden kullanın. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“this ile Oluşturucu Zincirleme” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Oluşturucuları Tanımlama
  2. this ile Oluşturucu Zincirleme
  3. Nesne ve Koleksiyon Başlatıcıları
  4. Statik Oluşturucular
← C# Academy Sayfasına Dön