Cara Menggunakan Properties C# Asp.Net


Properti menggabungkan aspek dari kedua field dan metod. Bagi user suatu objek, properti tampak sebagai field, mengakses properti memerlukan sintaks yang sama. Bagi pelaksana class, properti adalah satu atau dua blok code, mewakili accessor dan / atau accessor yang diset.

Blok code untuk mendapatkan aksesor dijalankan saat properti diread; blok code untuk accessor diset dijalankan saat properti diberi nilai baru. Sebuah properti tanpa accessor set dianggap read-only. Sebuah properti tanpa akseser dianggap write-only. Properti yang memiliki kedua aksesor adalah read-write. Tidak seperti field, properti tidak diklasifikasikan sebagai variabel.

Oleh karena itu, kita tidak bisa passing properti sebagai parameter ref atau out. Properti memiliki banyak kegunaan: mereka dapat memvalidasi data sebelum membiarkan perubahan; mereka dapat secara transparan mengekspos data pada sebuah class dimana data tersebut benar-benar diambil dari sumber lain, seperti database; mereka dapat mengambil tindakan saat data diubah, seperti meningkatkan events, atau mengubah nilai field lainnya.

Properti dideklarasikan di blok class dengan menentukan tingkat akses field, diikuti oleh type properti, diikuti oleh nama properti, dan diikuti oleh blok code yang menyatakan accessor dan / atau satu set accessor . Sebagai contoh:
public class Date
{
    private int month = 7;  // Backing store

    public int Month
    {
        get
        {
            return month;
        }
        set
        {
            if ((value > 0) && (value < 13))
            {
                month = value;
            }
        }
    }
}
Dalam contoh ini, Month dideclared sebagai properti sehingga atur accessor dapat memastikan bahwa nilai month ditetapkan antara 1 dan 12. Properti month menggunakan private field untuk melacak actual value. Lokasi sebenarnya dari data properti sering disebut sebagai "backing store" properti.

properti untuk menggunakan private fields sebagai backing store. Field ditandai secara private untuk memastikannya hanya dapat diubah dengan menghubungi properti.

  • The get Accessor


Body yang mendapatkan accessor menyerupai metode. Ini harus mengembalikan nilai tipe data properti. Eksekusi dari accessor bisa sama dengan membaca nilai field. Sebagai contoh, ketika kita mengembalikan field variabel dari pengakses dan pengoptimalan diaktifkan, panggilan ke metod accessor bisa dilakukan oleh compiler sehingga tidak ada overhead metod-panggilan.

Namun, virtual mendapatkan metode accessor tidak dapat direferensikan karena compiler tidak tahu pada waktu kompilasi metode mana yang sebenarnya bisa dipanggil pada saat run time. Berikut ini adalah akseser yang mengembalikan nilai nama field pribadi:
class Person
{
    private string name;  // the name field
    public string Name    // the Name property
    {
        get
        {
            return name;
        }
    }
}
Bila kita mereferensikan properti, kecuali sebagai target sebuah assignment, maka accessor dipanggil untuk membaca nilai properti. Sebagai contoh:
Person person = new Person();
//...
System.Console.Write(person.Name);  // the get accessor is invoked here
Get accessor harus diakhiri dengan pernyataan kembali atau melempar, dan kontrol tidak bisa mengalir dari bodi accessor. Ini adalah style pemrograman yang buruk untuk mengubah keadaan objek dengan menggunakan get accessor. Misalnya, accessor berikut ini menghasilkan efek samping dari perubahan keadaan objek setiap kali field number diakses.
private int number;
public int Number
{
    get
    {
        return number++;   // Don't do this
    }
}
Get accessor dapat digunakan untuk mengembalikan nilai field atau untuk menghitungnya dan return. Sebagai contoh:
class Employee
{
    private string name;
    public string Name
    {
        get
        {
            return name != null ? name : "NA";
        }
    }
}
Pada segmen kode sebelumnya, jika Anda tidak memberikan nilai pada properti Name, maka akan mengembalikan nilai NA.
Set Accessor
Accessor yang disetel menyerupai metod yang tipe pengembaliannya tidak berlaku. Ini menggunakan parameter implisit yang disebut nilai, yang tipenya adalah tipe properti. Dalam contoh berikut, accessor set ditambahkan ke properti Name:
class Person
{
    private string name;  // the name field
    public string Name    // the Name property
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }
}
Bila kita menetapkan nilai ke properti, accessor yang ditetapkan dipanggil dengan menggunakan argumen yang memberikan nilai baru. Sebagai contoh:
Person person = new Person();
person.Name = "Joe";  // the set accessor is invoked here                

System.Console.Write(person.Name);  // the get accessor is invoked here
Ini adalah error untuk menggunakan nama parameter implisit, value, untuk deklarasi variabel lokal di accessor yang diset. Keterangan Properti dapat ditandai sebagai publik private, protected, internal, protected internal or private protected.

Modifier akses ini menentukan bagaimana user class dapat mengakses properti. Get dan mengatur aksesor untuk properti yang sama mungkin memiliki pengubah akses yang berbeda. Misalnya, bisa jadi publik mengizinkan akses hanya-baca dari luar tipe, dan kumpulannya mungkin bersifat pribadi atau dilindungi.

Properti dapat dinyatakan sebagai properti statis dengan menggunakan keyword statis. Hal ini membuat properti tersedia bagi penelepon setiap saat, meskipun tidak ada instance dari class. Properti dapat ditandai sebagai properti virtual dengan menggunakan keyword virtual.

Hal ini memungkinkan class turunan untuk menggantikan behavior properti dengan menggunakan keyword override. Properti yang overrid properti virtual juga bisa disealed, menentukan bahwa untuk class turunan itu tidak lagi bersifat virtual. Terakhir, sebuah properti bisa dinyatakan abstrak.

Ini berarti bahwa tidak ada implementasi di class, dan class turunan harus menulis pelaksanaannya sendiri. Contoh Contoh ini menunjukkan properti instance, statis, dan read-only properties. Ini menerima nama Employee dari keyboard, menambahkan NumberOfEmployees sebesar 1, dan menampilkan nama dan nomor Employee.
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
*/
Contoh Contoh ini menunjukkan bagaimana mengakses properti di base class yang disembunyikan oleh properti lain yang memiliki nama yang sama di class turunan.
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
*/
Berikut ini adalah poin penting dalam contoh sebelumnya: Nama properti di class turunan menyembunyikan nama properti di base class. Dalam kasus seperti itu, modifier baru digunakan dalam deklarasi properti di class turunan:
public new string Name
Cast (Employee) digunakan untuk mengakses properti tersembunyi di base class:
((Employee)m1).Name = "Mary";
Contoh Dalam contoh ini, dua class, Cube dan Square, menerapkan class abstrak, Shape, dan override properti Area abstraknya. Perhatikan penggunaan modifier override pada properti. Program ini menerima sisi sebagai masukan dan menghitung area untuk square dan cube. Ini juga menerima area sebagai input dan menghitung sisi yang sesuai untuk square dan cube.
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
*/
Previous
Next Post »