C# Academy · Ders

unmanaged, notnull, new() (C# 6 öykünmesi)

C# 6, class/struct/new() kısıtlarını destekler; daha yeni notnull/unmanaged özelliklerini denetimler, API biçimi ve kurallar aracılığıyla öykünün.

1. ders / 38 adım

unmanaged, notnull, new() (C# 6 öykünmesi), CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 3 dersinin 1. 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 3 dersten oluşur.

Kısıtların genel görünümü

Hedef: C# 6 genel tür kısıtlarını etkili biçimde kullanmak.

  • sınıf ve yapı arasındaki fark
  • Etkinleştirici olmadan oluşturma için new()
  • Koruyucular ve API tasarımıyla null olamaz/yönetilmeyen kısıtlarını taklit etmek

sınıf ve yapı karşılaştırması

sınıf, T'yi başvuru türleriyle sınırlar; yapı, T'yi değer türleriyle sınırlar. Yanlış kullanım derleme zamanında başarısız olur.

using System;

// Works only for reference types
public static class RefBox
{
  public static string Show<T>(T value) where T : class
  {
    return value == null ? "null ref" : "ref: " + value.ToString();
  }
}

// Works only for value types
public static class ValBox
{
  public static string Show<T>(T value) where T : struct
  {
    return "value: " + value.ToString();
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    string s = "hello";
    int n = 42;

    Console.WriteLine(RefBox.Show<string>(s)); // OK
    Console.WriteLine(ValBox.Show<int>(n));    // OK

    // Console.WriteLine(RefBox.Show<int>(n)); // compile-time error (int is struct)
    // Console.WriteLine(ValBox.Show<string>(s)); // compile-time error (string is class)
  }
}

new() uygulamada

new(), herkese açık parametresiz bir oluşturucuyu garanti eder; böylece genel tür kodu doğrudan new T() çağrısını yapabilir.

using System;

// Requires public parameterless ctor on T
public static class Factory
{
  public static T Create<T>() where T : new()
  {
    return new T(); // safe in C# 6 with new()
  }
}

public sealed class Sample
{
  public string Name { get; set; }
  public Sample() { Name = "default"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Sample x = Factory.Create<Sample>();
    Console.WriteLine("Created: " + x.Name);
  }
}

null olamaz kısıtını taklit etme

C# 6'da null olamaz kısıtı yoktur. Bunu where T : sınıf ve API içinde açık null koruyucuları kullanarak yaklaşık olarak uygulayabilirsiniz.

using System;

// C# 6 has no notnull constraint. Use where T : class and guard at runtime.
public static class NotNullApi
{
  public static int LengthOf<T>(T x) where T : class
  {
    if (x == null) throw new ArgumentNullException("x");
    return x.ToString().Length; // placeholder usage
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(NotNullApi.LengthOf<string>("hi")); // 2
    try
    {
      Console.WriteLine(NotNullApi.LengthOf<string>(null)); // throws
    }
    catch (Exception ex)
    {
      Console.WriteLine("Guard fired: " + ex.GetType().Name);
    }
  }
}

Yönetilmeyen tür amacını taklit etme

C# 6'da yönetilmeyen kısıtı yoktur. Sayısal benzeri değer türlerini hedeflemek için yapı ve arayüzleri (örneğin karşılaştırılabilir) kullanabilirsiniz.

using System;

// No unmanaged constraint in C# 6.
// Use struct for value types and restrict API usage (document numeric-only intent).
public static class NumericOps
{
  public static T Max<T>(T a, T b) where T : struct, IComparable
  {
    // Works for numeric primitives because they implement IComparable
    return (a.CompareTo(b) >= 0) ? a : b;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(NumericOps.Max<int>(3, 9));     // 9
    Console.WriteLine(NumericOps.Max<double>(2.5, 2)); // 2.5
  }
}

Uygulama ipuçları

İpuçları:

  • T'yi erkenden daraltmak için sınıf/yapı seçiniz.
  • T oluşturmanız gerekiyorsa new() kullanınız.
  • null olamaz kısıtını çalışma zamanı koruyucularıyla taklit ediniz.
  • Yönetilmeyen kısıtını yapı ve belgelenmiş kullanım yoluyla taklit ediniz (çoğunlukla sayısal ilkel türlerle).

Oluşturucu kısıtı

Kısa kontrol: C# 6'da tür bağımsız değişkeni için herkese açık parametresiz oluşturucuyu hangi kısıt zorunlu kılar?

Özet

Özet: C# 6'da sınıf/yapı/new() kullanınız. Null olamaz amacını null denetimleriyle, yönetilmeyen tür amacını ise yapı ve arayüz sınırlarıyla taklit ediniz.

Başlamak ücretsiz

Yapay zeka eğitmeniyle C# öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
93
Dersler
346

Sıkça Sorulan Sorular

“unmanaged, notnull, new() (C# 6 öykünmesi)” dersi ücretsiz mi?

Evet — “unmanaged, notnull, new() (C# 6 öykünmesi)” 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 3 dersten oluşur.

“unmanaged, notnull, new() (C# 6 öykünmesi)” dersinde ne öğreneceğim?

C# 6, class/struct/new() kısıtlarını destekler; daha yeni notnull/unmanaged özelliklerini denetimler, API biçimi ve kurallar aracılığıyla öykünü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, 3 dersinin 1. dersidir.

“unmanaged, notnull, new() (C# 6 öykünmesi)” 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. unmanaged, notnull, new() (C# 6 öykünmesi)
  2. Genel matematik (genel bakış) ve genel öznitelikler (gerektiğinde)
  3. Yeniden kullanılabilir genel yardımcılar
← C# Academy Sayfasına Dön