Saya telah mendengar dua kata ini digunakan dalam tutorial Microsoft untuk VB.NET. Apa perbedaan antara kedua kata ini jika digunakan untuk merujuk pada variabel?
Variabel di C # ada di 1 dari 2 grup. Jenis nilai atau jenis Referensi . Tipe suka int
dan DateTime
merupakan tipe nilai . Sebaliknya, setiap kelas yang Anda buat adalah tipe referensi . String C # juga merupakan tipe referensi . Kebanyakan hal dalam kerangka .NET adalah tipe referensi .
Ada nama variabel dan nilainya . Dua bagian .
Variabel ini nama adalah apa yang Anda menyatakan hal itu terjadi. The nilai adalah apa yang Anda tetapkan untuk itu.
Semua variabel selalu diberi nilai awal pada saat variabel tersebut dideklarasikan . Jadi semua variabel diinisialisasi .
Untuk tipe nilai , seperti int
kompilator akan memberi mereka nilai yang valid jika Anda tidak melakukannya secara eksplisit. int
's menginisialisasi ke nol secara default, DateTime
' s inisialisasi untuk DateTime.MinValue
secara default.
Variabel tipe referensi diinisialisasi ke objek yang Anda berikan. Kompilator tidak akan menetapkan objek (yaitu nilai yang valid) jika Anda tidak melakukannya. Dalam hal ini nilainya null
- tidak ada. Jadi kami mengatakan bahwa referensi diinisialisasi ke null.
Manusia lahir. Objek dibuat instance-nya. Seorang bayi adalah turunan dari Manusia, sebuah objek adalah turunan dari suatu Kelas.
Tindakan membuat instance Kelas disebut instantiation (Ta-Da!)
MyClass myClassyReference = new MyClass();
Di atas, adalah salah untuk mengatakan "... membuat instance dari suatu objek ..."
edit - terinspirasi oleh diskusi komentar
Tiga hal berbeda sedang terjadi (di atas) menggunakan terminologi berbeda dan terminologi itu tidak dapat dipertukarkan:
MyClass myClassyReference
new MyClass()
=
.Menyatakan kembali fakta:
Variabel tipe referensi juga disebut "referensi". "Variabel jenis nilai" bukan referensi.
Ini: "objectA adalah turunan dari suatu objek" sangat salah. Jika objectA adalah "turunan dari objectB" maka itu harus objectA memulai kehidupan dengan tipe objectB - apapun itu - dan status saat ini - apapun itu. Bagaimana dengan membuat objek D, E, dan F saat objekB berubah? Tidak, tidak! Ini adalah kasus konseptual dan teknis "objectA adalah turunan dari Kelas". "Instansiasi" dan "instance dari" memiliki arti yang tepat - sebuah objek mendapatkan jenis, definisi, dan nilainya dari Kelas.
MyClass myClassyReference = null
Umumnya kita tidak mengatakan "variabel ditugaskan ke null" dan kita tidak pernah mengatakan "variabel mereferensikan null", Tidak. Sebaliknya kita mengatakan "variabel adalah null"; atau "variabel tidak mereferensikan apa pun", atau "referensinya nihil"
Aplikasi praktis:
Saya mengarahkan jari saya ke kode Anda dan berkata "instance ini memiliki properti yang tidak valid. Mungkin itulah sebabnya loop gagal. Anda harus memvalidasi parameter selama pembuatan instance." (yaitu argumen konstruktor).
Saya melihat ini di kode Anda,
MyClass myClassyReference;
myClassyReference.DoSomething();
"Anda mendeklarasikan variabel tetapi tidak pernah menetapkannya. Nol jadi tidak mereferensikan apa pun. Itulah mengapa pemanggilan metode memunculkan pengecualian."
akhir edit
Sebuah tipe referensi nama dan nilai variabel ada secara independen. Dan maksud saya mandiri.
Sebuah dipakai objek mungkin atau mungkin tidak memiliki referensi untuk itu.
Sebuah dipakai objek mungkin memiliki banyak referensi untuk itu.
Sebuah dinyatakan referensi mungkin atau mungkin tidak menunjuk ke suatu objek.
Sebuah variabel diinisialisasi dengan nilai. Sebuah objek dibuat instance-nya ketika memori dialokasikan untuknya dan konstruktornya telah dijalankan.
Misalnya di sini adalah variabel:
Variabel ini belum diinisialisasi . Setelah saya memberikan nilai ke
obj
variabel, variabel akan diinisialisasi. Berikut contoh inisialisasi:Instansiasi adalah hal yang sangat berbeda tetapi terkait karena instansiasi biasanya diikuti dengan inisialisasi:
Pada baris sebelumnya kode,
obj
variabel diinisialisasi dengan mengacu pada baruObject
yang dipakai . Kami mengatakan bahwa yang baruObject
dibuat instance-nya karena kami telah membuat instance baru darinya.Sekarang saya percaya bahwa VB.NET membuat ini jauh lebih membingungkan daripada C # karena tidak jelas bahwa suatu penugasan sedang berlangsung dalam kode di atas. Di C #, jauh lebih jelas bahwa ada instance instance dan inisialisasi variabel:
sumber
Untuk menginisialisasi sesuatu adalah mengaturnya ke nilai awalnya. Untuk memberi contoh sesuatu adalah untuk menciptakan sebuah instance dari itu.
Seringkali ini adalah hal yang kurang lebih sama. Ini:
instantiates sebuah
SqlConnection
objek, dan menginisialisasi yangconn
variabel dengan menetapkan ke contoh itu.Karena konstruktor objek juga menyetel properti objek ke nilai defaultnya, sering kali tepat untuk mengatakan bahwa membuat instance objek menginisialisasinya. (Menyesatkan, jika objek memperlihatkan metode yang harus Anda panggil secara eksplisit untuk menginisialisasi setelah dibuat, seperti yang terkadang terjadi.)
sumber
* Instansiasi berarti membuat instance untuk kelas atau objek. Inisialisasi berarti * memulai objek atau kelas yang sama untuk tujuan apa pun. **
sumber
Instantiated berarti sebuah instance dari objek telah dibuat. Initiated berarti objek yang sama telah melakukan beberapa inisialisasi.
sumber
Saat Anda membuat instance kelas atau objek, Anda membuat instance baru darinya, atau mengalokasikan memori untuk "menampung" satu. Menginisialisasi objek itu akan menjadi instruksi yang dilakukan selama pembuatan contoh.
sumber
Instansiasi adalah saat Anda membuat instance kelas. Instance itu kemudian menjadi objek, dan Anda dapat menyetel propertinya, atau memanggil metode di atasnya (perintahkan untuk melakukan sesuatu).
Inisiasi adalah saat Anda menyiapkan sekumpulan kondisi awal untuk sesuatu. Sesuatu itu mungkin sebuah objek, di mana Anda menyuruhnya untuk memulai sendiri, atau hanya variabel yang Anda tetapkan nilainya.
Sebuah objek mungkin menginisialisasi beberapa hal lain, atau bahkan membuat instance objek lain sebagai bagian dari inisiasinya.
Perbedaannya adalah bahwa instantiation adalah penciptaan sesuatu yang dapat melakukan sesuatu; inisiasi adalah hal-hal yang diselesaikan.
sumber
Lihat dokumen Java: https://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html
" Titik originOne = Titik baru (23, 94);
sumber
Kita bisa melihatnya seperti ini. Untuk baris kode di bawah ini:
Baris di atas dapat dibaca dengan dua cara berikut:
Subjek referensi atau konteks itu penting. Saat berbicara dalam istilah variabel , kami menggunakan kata inisialisasi . Saat berbicara dalam istilah kelas / tipe , kami menggunakan kata instantiate .
sumber
Instansiasi mengacu pada alokasi memori untuk membuat instance kelas sedangkan inisialisasi mengacu pada penamaan instance itu dengan menetapkan nama variabel ke instance itu.
Misalnya:
SqlConnection conn = new SqlConnection();
Berikut
new
adalah kata kunci yang mengalokasikan memori untuk sebuah instance danconn
merupakan nama variabel yang diberikan untuk instance itu.sumber
Orang lain telah menjelaskan perbedaannya, jadi saya tidak akan menjelaskan secara detail. Tetapi ada kasus di mana instantiation tidak menginisialisasi objek dengan benar. Saat Anda membuat instance objek, Anda juga menginisialisasinya dengan beberapa data. Kelas / tipe akan memiliki logika inisialisasi, sedangkan logika instantiation biasanya dilakukan oleh
new
kata kunci (pada dasarnya alokasi memori, penyalinan referensi, dll). Tapi instantiation tidak perlu menghasilkan status yang valid untuk objek, yaitu ketika kita dapat mengatakan objek tersebut tidak diinisialisasi . Berikut adalah contoh praktis di mana sebuah objek dapat dipakai tetapi tidak diinisialisasi (maaf misalnya di C #).GetUninitializedObject
tidak memanggil konstruktor untuk membuat instance objek di sana (tetapi beberapa keajaiban internal).Seseorang juga dapat berargumen bahwa tipe nilai tidak dibuat instance-nya tetapi hanya diinisialisasi karena tidak memerlukan alokasi baru ketika Anda melakukannya,
new..
tetapi itu tergantung pada definisi instantiasi seseorang.sumber