Aracılığıyla paylaş


Özellikleri Kullanma (C# Programlama Kılavuzu)

Özellik alanları ve yöntemleri yönlerini birleştirir.İçin kullanıcı nesnesinin bir özelliğini bir alan gibi görünüyor özelliğe erişmeden aynı sözdizimini gerektirir.İçin Uygulayıcısı bir sınıfın temsil eden bir veya iki kod bloklarını özelliğidir bir Al erişimci ve/veya bir set erişimci.Kod bloğu için get erişimci yürütüldüğünde özelliğini okuduğunuzda; kod bloğu için set erişimci özelliği yeni bir değer atandığında gerçekleştirilir.Bir özelliği olmayan bir set Erişimci salt okunur değerlendirilir.Bir özelliği olmayan bir get Erişimci salt yazılır değerlendirilir.Her iki erişeni olan bir okuma-yazma özelliğidir.

Alanları özellikler değişkenler olarak sınıflandırılmış değil.Bu nedenle, bir özellik olarak geçirilemez bir ref (C# Başvurusu) veya out (C# Başvurusu) parametresi.

Özellikleri birçok kullanımı vardır: bir değişiklik; izin vermeden önce verileri doğrulayabilir Burada bu verileri gerçekten bazı diğer kaynak veritabanı gibi alınır bir sınıf verileri şeffaf sundukları; veri değiştirildiğinde bir olayý çaðýrmak veya diğer alanların değerini değiştirme gibi bunlar bir önlem alabilirsiniz.

Özellikler alan erişim düzeyini belirleyerek sınıf bloğu içinde bildirilen ve ardından özelliğin türünü, özellik adıyla ve bildiren bir kod bloğu tarafından izlenen bir get-erişimcisi ve/veya bir set erişimci.Örne?in:

public class Date
{
    private int month = 7;  // Backing store 

    public int Month
    {
        get
        {
            return month;
        }
        set
        {
            if ((value > 0) && (value < 13))
            {
                month = value;
            }
        }
    }
}

Bu örnekte, Month bir özellik olarak, bu nedenle bildirilmiş set erişimci emin Month değeri 1 ile 12 arasında ayarlanır.Month Özelliği gerçek değerini izlemek için özel bir alan kullanır.Bir özelliğin veri gerçek konumunu genellikle özelliğin "yedekleme deposu olarak." denir. Özel alanlar bir yedekleme deposu olarak kullanılacak özellikleri yaygındır.Alan, yalnızca özelliðini çaðýrarak değiştirilebilir olduğunu emin olmak için özel olarak işaretlenir.Public ve private erişim sınırlamaları hakkında daha fazla bilgi için bkz: Erişim Değiştiricileri (C# Programlama Kılavuzu).

Otomatik uygulanan özellikler basit özellik bildirimleri için Basitleştirilmiş bir sözdizimi sağlar.Daha fazla bilgi için bkz. Otomatik Uygulanan Özellikler (C# Programlama Kılavuzu).

Get erişimcisi

Gövdesi get erişimci benzer bir yöntem.Bu özellik türünde bir deðer döndürmelidir.Yürütülmesini get erişimci alanın değerini okumak için eşdeğer.Örneğin, ne zaman size döndüren özel değişkene get erişimci ve en iyi duruma getirme etkin, çağrı get erişimci yöntemi vardır, bu nedenle yöntem çağrısı olmamasıdır derleyici tarafından inlined.Ancak, bir sanal get erişimci yöntemi olamaz inlined çünkü derleyici derleme zamanında-hangi yöntemi aslında adlı çalışma zamanında bilmez.Aşağıda bir get özel alanın değerini döndüren erişimci name:

class Person
{
    private string name;  // the name field 
    public string Name    // the Name property
    {
        get
        {
            return name;
        }
    }
}

Özellik dışında atama işleminin hedefi başvuru yaparken get özelliğinin değeri okunamadı erişeni çağrılabilir.Örne?in:

Person person = new Person();
//...

System.Console.Write(person.Name);  // the get accessor is invoked here

get Erişimci gereken son bir dönmek veya throw ifade ve denetim devre dışı erişimci gövde akış olamaz.

Kullanarak nesnenin durumunu değiştirmek için bozuk bir programlama stili olarak get erişimci.Örneğin, aşağıdaki erişen her nesnenin durumunu değiştirme bir yan etkisi üretir, number alan erişildiğinde.

private int number;
public int Number
{
    get
    {
        return number++;   // Don't do this
    }
}

get Erişimci alan değerini döndürmek veya yeniden hesaplamak ve geri göndermek için kullanılabilir.Örne?in:

class Employee
{
    private string name;
    public string Name
    {
        get
        {
            return name != null ? name : "NA";
        }
    }
}

Bir değer atamazsanız segmentteki önceki kod, Name özelliği, onu dönüş değeri gösterilir.

Set erişimcisi

set Erişimci benzer bir yöntemin dönüş türü olan void.Adında bir örtülü parametre kullanır value, özellik türünü türü olan.Aşağıdaki örnekte, bir set erişimci eklenen Name özelliği:

class Person
{
    private string name;  // the name field 
    public string Name    // the Name property
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }
}

Özellik için bir değer atadığınızda set erişimci yeni değer sağlayan bir baðýmsýz deðiþkeni kullanýlarak çağrıldığında.Örne?in:

Person person = new Person();
person.Name = "Joe";  // the set accessor is invoked here                

System.Console.Write(person.Name);  // the get accessor is invoked here

Örtülü parametre adı kullanmak için bir hata olduğunu value, bir yerel değişken bildiriminde'için bir set erişimci.

Notlar

Properties can be marked as public, private, protected, internal, or protected internal.Bu erişim değiştiricileri, kullanıcı sınıfı özelliği nasıl erişebileceğiniz tanımlayın.get Ve set erişimcileri aynı özellik için farklı erişim değiştirici olabilir.Örneğin, get olabilir public türü dışında salt okunur erişime karşı izin vermek ve set olabilir private veya protected.Daha fazla bilgi için bkz. Erişim Değiştiricileri (C# Programlama Kılavuzu).

Bir özellik kullanarak bir statik özellik olarak bildirilebilir static anahtar sözcüğü.Sınıf örneği bulunsa bile, bu özellik her zaman Arayanlara kullanılabilmesini sağlar.Daha fazla bilgi için bkz. Statik Sınıflar ve Statik Sınıf Üyeleri (C# Programlama Kılavuzu).

Bir özellik kullanarak sanal bir özellik olarak işaretlenebilir sanal anahtar sözcüğü.Bu kullanarak özellik davranışını geçersiz kılmak türetilmiş sınıfları tanır geçersiz kılma anahtar sözcüğü.Bu seçenekler hakkında daha fazla bilgi için, bkz. Devralma (C# Programlama Kılavuzu).

Sanal özelliği geçersiz kılma bir özellik de olabilir mühürlenmiş, türetilmiş sınıfları için artık sanal olduğunu belirtme.Son olarak, bir özellik bildirilmiş soyut.Bunun anlamı sınıfında hiçbir uygulama yoktur ve türetilmiþ sýnýflarýn kendi uygulama yazmalısınız.Bu seçenekler hakkında daha fazla bilgi için, bkz. Soyut ve Korumalı Sınıflar ve Sınıf Üyeleri (C# Programlama Kılavuzu).

[!NOT]

Kullanmak için bir hata olduğu bir virtual (C# Başvurusu), abstract (C# Başvurusu), veya override (C# Başvurusu) bir erişimci değiştirici bir statik özelliği.

Örnek

Bu örnek, örnek, statik ve salt okunur özelliklerini gösterir.Klavye artımları çalışanın adını kabul edip NumberOfEmployees 1 ve görüntüler çalışan adı ve numarası.

public class Employee
{
    public static int NumberOfEmployees;
    private static int counter;
    private string name;

    // A read-write instance property: 
    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    // A read-only static property: 
    public static int Counter
    {
        get { return counter; }
    }

    // A Constructor: 
    public Employee()
    {
        // Calculate the employee's number:
        counter = ++counter + NumberOfEmployees;
    }
}

class TestEmployee
{
    static void Main()
    {
        Employee.NumberOfEmployees = 107;
        Employee e1 = new Employee();
        e1.Name = "Claude Vige";

        System.Console.WriteLine("Employee number: {0}", Employee.Counter);
        System.Console.WriteLine("Employee name: {0}", e1.Name);
    }
}
/* Output:
    Employee number: 108
    Employee name: Claude Vige
*/

Bu örnek, türetilmiş bir sınıf aynı ada sahip başka bir özelliği tarafından gizli bir taban sınıftaki bir özelliğine erişmek nasıl gösterir.

public class Employee
{
    private string name;
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}

public class Manager : Employee
{
    private string name;

    // Notice the use of the new modifier: 
    public new string Name
    {
        get { return name; }
        set { name = value + ", Manager"; }
    }
}

class TestHiding
{
    static void Main()
    {
        Manager m1 = new Manager();

        // Derived class property.
        m1.Name = "John";

        // Base class property.
        ((Employee)m1).Name = "Mary";

        System.Console.WriteLine("Name in the derived class is: {0}", m1.Name);
        System.Console.WriteLine("Name in the base class is: {0}", ((Employee)m1).Name);
    }
}
/* Output:
    Name in the derived class is: John, Manager
    Name in the base class is: Mary
*/

Önceki örnekte önemli noktalar şunlardır:

  • Özellik Name türetilmiş bir sınıf içerisinde özelliği gizler Name temel sınıfta.Böyle bir durumda new değiştirici, türetilmiş sınıf içinde özellik bildiriminde kullanılır:

    public new string Name
    
  • Cast (Employee) temel sınıfta gizli özelliğine erişmek için kullanılır:

    ((Employee)m1).Name = "Mary";
    

    Üyeleri gizleme hakkında daha fazla bilgi için bkz: new Değiştiricisi (C# Başvurusu).

Bu örnekte, iki sınıf Cube ve Square, soyut bir sınıf uygulamak Shape, soyut, geçersiz kılmak ve Area özelliği.Kullanımına dikkat edin geçersiz kılma değiştirici özellikleri.Program tarafı bir giriş olarak kabul eder ve kare ve küp için alanları hesaplar.Ayrıca, alan bir giriş olarak kabul eder ve karşılık gelen yan kare ve küp için hesaplar.

abstract class Shape
{
    public abstract double Area
    {
        get;
        set;
    }
}

class Square : Shape
{
    public double side;

    public Square(double s)  //constructor
    {
        side = s;
    }

    public override double Area
    {
        get
        {
            return side * side;
        }
        set
        {
            side = System.Math.Sqrt(value);
        }
    }
}

class Cube : Shape
{
    public double side;

    public Cube(double s)
    {
        side = s;
    }

    public override double Area
    {
        get
        {
            return 6 * side * side;
        }
        set
        {
            side = System.Math.Sqrt(value / 6);
        }
    }
}

class TestShapes
{
    static void Main()
    {
        // Input the side:
        System.Console.Write("Enter the side: ");
        double side = double.Parse(System.Console.ReadLine());

        // Compute the areas:
        Square s = new Square(side);
        Cube c = new Cube(side);

        // Display the results:
        System.Console.WriteLine("Area of the square = {0:F2}", s.Area);
        System.Console.WriteLine("Area of the cube = {0:F2}", c.Area);
        System.Console.WriteLine();

        // Input the area:
        System.Console.Write("Enter the area: ");
        double area = double.Parse(System.Console.ReadLine());

        // Compute the sides:
        s.Area = area;
        c.Area = area;

        // Display the results:
        System.Console.WriteLine("Side of the square = {0:F2}", s.side);
        System.Console.WriteLine("Side of the cube = {0:F2}", c.side);
    }
}
/* Example Output:
    Enter the side: 4
    Area of the square = 16.00
    Area of the cube = 96.00

    Enter the area: 24
    Side of the square = 4.90
    Side of the cube = 2.00
*/

Ayrıca bkz.

Başvuru

Özellikler (C# Programlama Kılavuzu)

Arabirim Özellikleri (C# Programlama Kılavuzu)

Otomatik Uygulanan Özellikler (C# Programlama Kılavuzu)

Kavramlar

C# Programlama Kılavuzu