Penjelasan dan Contoh Objects C# Asp.Net


Definisi class atau struct seperti blueprint yang menentukan tipe data yang dapat dilakukan. Objek pada dasarnya adalah blok memori yang telah dialokasikan dan dikonfigurasi sesuai dengan blue print. Sebuah program dapat membuat banyak objek dari class yang sama.

Objek juga disebut instances, dan dapat disimpan dalam variabel atau dalam array atau collection. Clint code adalah code yang menggunakan variabel ini untuk memanggil metod dan mengakses properti publik objek.

Dalam bahasa berorientasi objek seperti C #, sebuah program tipikal terdiri dari beberapa objek yang berinteraksi secara dinamis.
  • Struct Instances vs. Class Instances 
Karena class adalah tipe referensi, variabel objek kelas menyimpan referensi ke alamat objek pada tumpukan yang dikelola. Jika objek kedua dari tipe yang sama ditugaskan ke objek pertama, kedua variabel tersebut merujuk ke objek pada alamat itu. Hal ini dibahas lebih rinci nanti dalam topik ini. Instances class dibuat dengan menggunakan operator baru.

Dalam contoh berikut, Person adalah tipe data dan person1 dan person 2 adalah instance, atau objek, dari tipe itu.
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
*/
Karena struct adalah value types, variabel dari objek struct menyimpan salinan keseluruhan objek. Instances struct juga dapat dibuat dengan menggunakan operator baru, tapi ini tidak diperlukan, seperti yang ditunjukkan pada contoh berikut:
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
*/
Memori untuk kedua p1 dan p2 dialokasikan pada tumpukan benang. Ingatan itu direklamasi bersamaan dengan tipe data atau metode di mana ia di declared. Inilah salah satu alasan mengapa struct disalin pada tugas.

Sebaliknya, memori yang dialokasikan untuk instance class secara otomatis direklamasi (pengumpulan sampah) oleh runtime bahasa umum ketika semua referensi ke objek telah hilang dari ruang lingkup. Hal ini tidak mungkin untuk secara deterministik menghancurkan objek kelas seperti Kita bisa di C ++.
  • Object Identity vs. Value Equality
Bila kita membandingkan dua objek untuk persamaan, Kita harus terlebih dahulu membedakan apakah kita ingin mengetahui apakah kedua variabel tersebut mewakili objek yang sama dalam memori, atau apakah nilai dari satu atau lebih bidangnya setara.

Jika kita berniat untuk membandingkan nilai, kita harus mempertimbangkan apakah objek adalah contoh tipe nilai (struct) atau tipe referensi (class, delegasi, array).
1. Untuk menentukan apakah dua contoh kelas merujuk ke lokasi yang sama di memori (yang berarti
    bahwa mereka memiliki identitas yang sama), gunakan metode Setara statis.
    (System.Object adalah kelas dasar implisit untuk semua value type dan tipe data referensi, 
    termasuk struct dan class yang ditentukan pengguna.)
2. Untuk menentukan apakah bidang contoh dalam dua contoh struct memiliki nilai yang sama,
    gunakan metode ValueType.Equals. Karena semua struct secara implisit mewarisi dari
    System.ValueType, Kita memanggil metode ini secara langsung pada objek kita seperti yang
    ditunjukkan pada contoh berikut:
// Person is defined in the previous example. 

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

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.
Implementasi System.ValueType Equals menggunakan refleksi karena harus dapat menentukan bidang apa yang ada dalam struct apapun.

Saat membuat struct kita sendiri, override metod Equals untuk menyediakan algoritma kesetaraan yang efisien yang spesifik untuk tipe data kita.
Previous
Next Post »