new işleci (C# başvurusu)

newişleci, bir türün yeni bir örneğini oluşturur.

anahtar sözcüğünü üye bildirimi new değiştiricisi veya genel tür kısıtlaması olarak da kullanabilirsiniz.

Oluşturucu çağırma

Bir türün yeni bir örneğini oluşturmak için genellikle işleci kullanarak bu türün oluşturucularından birini new çağırırsanız:

var dict = new Dictionary<string, int>();
dict["first"] = 10;
dict["second"] = 20;
dict["third"] = 30;

Console.WriteLine(string.Join("; ", dict.Select(entry => $"{entry.Key}: {entry.Value}")));
// Output:
// first: 10; second: 20; third: 30

Aşağıdaki örnekte de olduğu gibi, bir nesnesini bir deyiminde başlatmak ve örneği başlatmak için işleciyle bir nesne veya koleksiyon new başlatıcı kullanabilirsiniz:

var dict = new Dictionary<string, int>
{
    ["first"] = 10,
    ["second"] = 20,
    ["third"] = 30
};

Console.WriteLine(string.Join("; ", dict.Select(entry => $"{entry.Key}: {entry.Value}")));
// Output:
// first: 10; second: 20; third: 30

C# 9.0'dan itibaren, oluşturucu çağırma ifadeleri hedef türe sahip olur. Başka bir ifadenin hedef türü biliniyorsa, aşağıdaki örnekte de olduğu gibi bir tür adını atlarsanız:

List<int> xs = new();
List<int> ys = new(capacity: 10_000);
List<int> zs = new() { Capacity = 20_000 };

Dictionary<int, List<int>> lookup = new()
{
    [1] = new() { 1, 2, 3 },
    [2] = new() { 5, 8, 3 },
    [5] = new() { 1, 0, 4 }
};

Yukarıdaki örnekte de olduğu gibi, hedef türü her ifadede parantez new kullanırsiniz.

Bir ifadenin hedef türü new bilinmiyorsa (örneğin, anahtar sözcüğünü var kullanıyorsanız), bir tür adı belirtmeniz gerekir.

Dizi oluşturma

Aşağıdaki örnekte de new olduğu gibi, bir dizi örneği oluşturmak için işleci de kullanırsiniz:

var numbers = new int[3];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;

Console.WriteLine(string.Join(", ", numbers));
// Output:
// 10, 20, 30

Dizi başlatma söz dizimi kullanarak bir dizi örneği oluşturun ve bunu bir deyiminde öğelerle doldurmak için kullanın. Aşağıdaki örnekte bunu nasıl gerçekleştirebilirsiniz?

var a = new int[3] { 10, 20, 30 };
var b = new int[] { 10, 20, 30 };
var c = new[] { 10, 20, 30 };
Console.WriteLine(c.GetType());  // output: System.Int32[]

Diziler hakkında daha fazla bilgi için bkz. Diziler.

Anonim türlerin örneği

Anonim türde bir örnek oluşturmak için işlecive nesne new başlatıcı söz dizimi kullanın:

var example = new { Greeting = "Hello", Name = "World" };
Console.WriteLine($"{example.Greeting}, {example.Name}!");
// Output:
// Hello, World!

Tür örneklerinin yok edilmesi

Daha önce oluşturulan tür örneklerini yok etmek zorunda değilsiniz. Hem başvuru hem de değer türlerinin örnekleri otomatik olarak yok edilir. Değer türlerinin örnekleri, bunları içeren bağlam yok edildiklerinde yok edilir. Başvuru türlerinin örnekleri, son başvuru kaldırıldıktan sonra belirtilmeyen bir zamanda atık toplayıcı tarafından yok edilir.

Örneğin, bir dosya tanıtıcısı gibi, unmanaged kaynakları içeren tür örnekleri için, içerdiğiniz kaynakların mümkün olan en kısa zamanda serbest bırakıldıklarının emin olmak için belirlenimci temizlemenin kullanılması önerilir. Daha fazla bilgi için API başvurusu System.IDisposable ve using deyimi makalesine bakın.

İşleç aşırı yüklemesi

Kullanıcı tanımlı tür, işleci aşırı yük new devredamaz.

C# dili belirtimi

Daha fazla bilgi için bkz. C# dil belirtimlerinin yeni işleç bölümü.

Hedef türüne sahip bir ifade hakkında daha fazla new bilgi için özellik teklifi notuna bakın.

Ayrıca bkz.