Aracılığıyla paylaş


Nesneleri (C# Programlama Kılavuzu)

Bir sınıf veya yapı birimi türü neler yapabileceğini belirten şeması gibi tanımıdır.Temel olarak ayrılan ve şeması göre yapılandırılmış bellek bloğunu nesnesidir.Bir program aynı sınıfın birçok nesne oluşturabilir.Nesne örnekleri de denir ve adlandırılmış bir değişken veya bir dizi ya da koleksiyonu depolanabilir.İstemci kodu bu değişkenler yöntemlerini çağırabilir ve ortak nesne özelliklerine erişmek için kullandığı koddur.Bir nesne yönelimli dilde C# gibi tipik bir programı birden çok nesneyi dinamik olarak etkileşim oluşur.

[!NOT]

Statik türler burada olarak açıklanan farklı şekilde davranır.Daha fazla bilgi için bkz. Statik sınıflar ve statik sınıf üyelerini (C# Programlama Kılavuzu).

Yapı örnekleri vs. sınıf örneği

Sınıflar başvuru türüdür çünkü sınıf nesnesi değişken nesne adresine başvuru yönetilen yığında tutarken.İkinci bir nesne aynı türde ilk nesneye atanmış ise, her iki değişken nesne bu adresten başvurun.Bu nokta, bu konunun ilerleyen bölümlerinde daha ayrıntılı ele alınmıştır.

Sınıfları kullanılarak oluşturulmuş Yeni işleç.Aşağıdaki örnekte, Person türü ve person1 ve person 2 örnekleri ya da bu tür nesneler.

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
    //Other properties, methods, events...
}

class Program
{
    static void Main()
    {
        Person person1 = new Person("Leopold", 6);
        Console.WriteLine("person1 Name = {0} Age = {1}", person1.Name, person1.Age);

        // Declare  new person, assign person1 to it.
        Person person2 = person1;

        //Change the name of person2, and person1 also changes.
        person2.Name = "Molly";
        person2.Age = 16;

        Console.WriteLine("person2 Name = {0} Age = {1}", person2.Name, person2.Age);
        Console.WriteLine("person1 Name = {0} Age = {1}", person1.Name, person1.Age);

        // Keep the console open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();

    }
}
/*
    Output:
    person1 Name = Leopold Age = 6
    person2 Name = Molly Age = 16
    person1 Name = Molly Age = 16
*/

Yapılar değer türüdür çünkü bir değişken yapı nesnesinin tüm nesnenin bir kopyasını tutar.Yapılar örneklerini de oluşturulabilir kullanarak new işleç, ancak bu gerekli değildir, aşağıdaki örnekte gösterildiği gibi:

public struct Person
{
    public string Name;
    public int Age;
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

public class Application
{
    static void Main()
    {
        // Create  struct instance and initialize by using "new".
        // Memory is allocated on thread stack.
        Person p1 = new Person("Alex", 9);
        Console.WriteLine("p1 Name = {0} Age = {1}", p1.Name, p1.Age);

        // Create  new struct object. Note that  struct can be initialized
        // without using "new".
        Person p2 = p1;

        // Assign values to p2 members.
        p2.Name = "Spencer";
        p2.Age = 7;
        Console.WriteLine("p2 Name = {0} Age = {1}", p2.Name, p2.Age);

        // p1 values remain unchanged because p2 is  copy.
        Console.WriteLine("p1 Name = {0} Age = {1}", p1.Name, p1.Age);

        // Keep the console open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}
/*
  Output:
    p1 Name = Alex Age = 9
    p2 Name = Spencer Age = 7
    p1 Name = Alex Age = 9
*/

Bellek her ikisi için de p1 ve p2 iş parçacığı yığın üzerinde tahsis edilir.Tür ya da yöntem, bildirildiði iadesi istenen bellek.Yapılar atamada neden kopyalandığı bir nedeni budur.Nesne tüm başvuruları kapsam dışına gitti tersine, sınıf örneği için ayrılan bellek (otomatik olarak reclaimed çöp toplama) ortak dil çalışma zamanı tarafından durumdur.C++ gibi sınıf nesnesi kilidinin yok etmek mümkün değildir.İçinde çöp toplama hakkında daha fazla bilgi için .NET Framework, bkz: Çöp Toplama.

[!NOT]

Ayırma ve yönetilen yığında bellek ayırmayı kaldırma yüksek oranda ortak dil çalışma zamanı optimize.Çoğu durumda yığında yapı örneği ayırma karşı yığında bir sınıf örneği ayrılırken, performans maliyet önemli fark yoktur.

Nesne kimliği vs. değeri eşitlik

Eşitlik için iki nesne karşılaştırdığınızda, bellek aynı nesnenin iki değişken mi temsil ya da bir veya daha fazla alanlarının değerlerini eşdeğer olup bilmek ister mi ilk ayırdetmek.Değerleri karşılaştırmak tasarladıysanız, nesnelerin örneklerini değer türleri (yapılar) ya da baþvuru türü (sınıflar, temsilciler, diziler) olup olmadığını dikkate almanız gerekir.

  • Bellek aynı konumda iki sınıf örneklerine bakın olup olmadığını belirlemek için (başka bir deyişle, bunlar aynı olan kimlik), statik kullanmak Equals yöntem.(System.Object değer türleri ve başvuru türleri, kullanıcı tanımlı yapılar ve sınıflar da dahil olmak üzere tüm dolaylı temel sınıftır.)

  • İki yapı örnekleri örnek alanları aynı değerlere sahip olup olmadığınızı belirlemek için ValueType.Equals yöntem.Çünkü tüm yapılar dolaylı olarak devralınan System.ValueType, nesne üzerinde doğrudan aşağıdaki örnekte gösterildiği gibi yöntemini çağırın:

Person p1 = new Person("Wallace", 75);
Person p2;
p2.Name = "Wallace";
p2.Age = 75;

if (p2.Equals(p1))
    Console.WriteLine("p2 and p1 have the same values.");

// Output: p2 and p1 have the same values.

System.ValueType Uygulaması Equals hangi alanların herhangi bir yapıda olduğunu belirlemek mümkün olmalıdır çünkü yansıması kullanır.Kendi yapı oluşturulurken geçersiz kılma Equals türünüz için belirli bir verimli eşitlik algoritma sağlamak için yöntem.

İlgili Bölümler

Daha fazla bilgi için:

Ayrıca bkz.

Başvuru

nesne (C# Reference)

Kalıtım (C# Programlama Kılavuzu)

sınıf (C# Reference)

Yapı (C# Reference)

new operatörü (C# Reference)

Kavramlar

C# Programlama Kılavuzu

Ortak tür sistemi