Anda dapat menggunakan metode statis tanpa membuat turunan dari kelas itu hanya dengan class_name.static_method_name ();
Javed Akram
Pada level pemrograman, kami merasa bahwa kami dapat memanggil metode statis tanpa membuat instance dari kelas / tipe. Secara internal bukan itu masalahnya. CLR secara internal mengelola instance khusus bernama type instance untuk mengatur panggilan ke metode statis. Silakan lihat jawaban ini . Sangat menarik.
RBT
Jawaban:
313
Sebuah staticfungsi, tidak seperti biasa ( misalnya ) fungsi, tidak terkait dengan sebuah instance dari kelas.
Sebuah statickelas adalah kelas yang hanya dapat berisi staticanggota, dan karena itu tidak dapat dipakai.
Jadi itu seperti metode kelas, bukan metode contoh?
Moshe
4
@ Moshe: Tepat. Dengan metode statis, Anda tidak perlu instance kelas untuk memanggil metode, hanya kelas.
Binary Worrier
3
Tetapi apakah sebenarnya ada semacam batasan teknis yang mencegah memanggil metode statis pada contoh? Jika kompiler mengizinkannya, apa bahayanya dapat diakses?
Di mana "StaticMethod" adalah metode Kelas dan "InstanceMethod" adalah Metode Instance dari Kelas SomeClass
Usman Younas
26
Dari sudut pandang lain: Pertimbangkan bahwa Anda ingin membuat beberapa perubahan pada satu String. misalnya Anda ingin membuat huruf besar dan sebagainya. Anda membuat kelas lain bernama "Alat" untuk tindakan ini. tidak ada arti membuat turunan dari kelas "Alat" karena tidak ada jenis entitas apa pun yang tersedia di dalam kelas itu (dibandingkan dengan kelas "Orang" atau "Guru"). Jadi kami menggunakan kata kunci statis untuk menggunakan kelas "Alat" tanpa membuat instance dari itu, dan ketika Anda menekan titik setelah nama kelas ("Alat") Anda dapat memiliki akses ke metode yang Anda inginkan.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1{classProgram{staticvoidMain(string[] args){Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));Console.ReadKey();}}publicstaticclassTools{publicstaticstringToUpperCase(string str){return str.ToUpper();}}}
Menggunakan "membuat perubahan pada string" adalah contoh yang buruk - string tidak dapat diubah dan tidak dapat diubah. Tetapi, jika tidak, penjelasannya masuk akal (menggantikan kelas untuk string yang tidak dapat diubah)
Flydog57
13
Metode statis, bidang, properti, atau peristiwa dapat dipanggil pada kelas bahkan ketika tidak ada instance kelas telah dibuat. Jika instance kelas dibuat, mereka tidak dapat digunakan untuk mengakses anggota statis. Hanya satu salinan bidang dan peristiwa statis yang ada, dan metode dan properti statis hanya dapat mengakses bidang statis dan peristiwa statis. Anggota statis sering digunakan untuk mewakili data atau perhitungan yang tidak berubah sebagai respons terhadap keadaan objek; misalnya, perpustakaan matematika mungkin berisi metode statis untuk menghitung sinus dan cosinus. Anggota kelas statis dinyatakan menggunakan kata kunci statis sebelum jenis kembalinya
Fungsi statis berarti bahwa ia dikaitkan dengan kelas (bukan instance kelas tertentu tetapi kelas itu sendiri) dan itu dapat dipanggil bahkan ketika tidak ada instance kelas ada.
Kelas statis berarti kelas itu hanya berisi anggota statis.
Ketika Anda menambahkan kata kunci "statis" ke suatu metode, itu berarti bahwa implementasi yang mendasarinya memberikan hasil yang sama untuk setiap instance kelas. Tidak perlu dikatakan, hasilnya bervariasi dengan perubahan nilai parameter
Kata kunci statis, ketika diterapkan pada suatu kelas, memberi tahu kompiler untuk membuat turunan tunggal dari kelas itu. Maka tidak mungkin untuk 'baru' satu contoh atau lebih dari kelas. Semua metode dalam kelas statis sendiri harus dinyatakan statis.
Adalah mungkin, Dan sering diinginkan, untuk memiliki metode statis dari kelas non-statis. Misalnya metode pabrik ketika membuat turunan dari kelas lain sering dinyatakan statis karena ini berarti bahwa instance tertentu dari kelas yang mengandung metode faktor tidak diperlukan.
Untuk penjelasan yang baik tentang bagaimana, kapan dan di mana lihat MSDN
Tidak, kelas statis tidak pernah dipakai. Mengingat bahwa semua yang ada di dalamnya adalah statis, mengapa Anda ingin instantiate?
Jon Skeet
1
Sebuah statickelas tidak memiliki contoh sama sekali.
SLaks
4
Maaf teman-teman, saya tidak mengerti ... saya katakan satu contoh dibuat dan Anda tidak dapat yang baru. Tentunya contoh tunggal, statis, dibuat jika kode tidak dapat dipanggil?
Dave Arkley 8-10
2
Kelas statis memang memiliki instance, pada kenyataannya dua, mereka hanya bukan contoh dari Tipe. Kelas statis akan ada di heap sebagai objek Jenis [Foo] (tabel metode pencarian dll untuk JIT), dan objek System.Type khusus yang digunakan untuk inisialisasi.
mccainz
Kelas dapat dideklarasikan statis, yang menunjukkan bahwa itu hanya berisi anggota statis. Tidak mungkin membuat instance dari kelas statis menggunakan kata kunci baru. Kelas statis dimuat secara otomatis oleh .NET Framework common language runtime (CLR) ketika program atau namespace yang memuat kelas tersebut dimuat.
Jawaban:
Sebuah
static
fungsi, tidak seperti biasa ( misalnya ) fungsi, tidak terkait dengan sebuah instance dari kelas.Sebuah
static
kelas adalah kelas yang hanya dapat berisistatic
anggota, dan karena itu tidak dapat dipakai.Sebagai contoh:
Untuk dapat menelepon
InstanceMethod
, Anda memerlukan instance kelas:sumber
Dari sudut pandang lain: Pertimbangkan bahwa Anda ingin membuat beberapa perubahan pada satu String. misalnya Anda ingin membuat huruf besar dan sebagainya. Anda membuat kelas lain bernama "Alat" untuk tindakan ini. tidak ada arti membuat turunan dari kelas "Alat" karena tidak ada jenis entitas apa pun yang tersedia di dalam kelas itu (dibandingkan dengan kelas "Orang" atau "Guru"). Jadi kami menggunakan kata kunci statis untuk menggunakan kelas "Alat" tanpa membuat instance dari itu, dan ketika Anda menekan titik setelah nama kelas ("Alat") Anda dapat memiliki akses ke metode yang Anda inginkan.
sumber
Metode statis, bidang, properti, atau peristiwa dapat dipanggil pada kelas bahkan ketika tidak ada instance kelas telah dibuat. Jika instance kelas dibuat, mereka tidak dapat digunakan untuk mengakses anggota statis. Hanya satu salinan bidang dan peristiwa statis yang ada, dan metode dan properti statis hanya dapat mengakses bidang statis dan peristiwa statis. Anggota statis sering digunakan untuk mewakili data atau perhitungan yang tidak berubah sebagai respons terhadap keadaan objek; misalnya, perpustakaan matematika mungkin berisi metode statis untuk menghitung sinus dan cosinus. Anggota kelas statis dinyatakan menggunakan kata kunci statis sebelum jenis kembalinya
sumber
Fungsi statis berarti bahwa ia dikaitkan dengan kelas (bukan instance kelas tertentu tetapi kelas itu sendiri) dan itu dapat dipanggil bahkan ketika tidak ada instance kelas ada.
Kelas statis berarti kelas itu hanya berisi anggota statis.
sumber
Segera Anda tidak dapat membuat instance kelas statis: Mis:
Anda tidak bisa membuat seperti ini:
Anda hanya dapat membuat:
sumber
Ketika Anda menambahkan kata kunci "statis" ke suatu metode, itu berarti bahwa implementasi yang mendasarinya memberikan hasil yang sama untuk setiap instance kelas. Tidak perlu dikatakan, hasilnya bervariasi dengan perubahan nilai parameter
sumber
Variabel statis tidak terhubung dengan objek kelas. Itu dapat diakses menggunakan classname. Semua objek kelas akan berbagi variabel statis.
Dengan menjadikan fungsi sebagai statis, Ini akan membatasi akses fungsi itu di dalam file itu.
sumber
Inti dari kata kunci statis yang Anda hanya akan memiliki satu salinan pada RAM ini (metode / variabel / kelas) yang dibagikan untuk semua panggilan
sumber
Kata kunci statis, ketika diterapkan pada suatu kelas, memberi tahu kompiler untuk membuat turunan tunggal dari kelas itu. Maka tidak mungkin untuk 'baru' satu contoh atau lebih dari kelas. Semua metode dalam kelas statis sendiri harus dinyatakan statis.
Adalah mungkin, Dan sering diinginkan, untuk memiliki metode statis dari kelas non-statis. Misalnya metode pabrik ketika membuat turunan dari kelas lain sering dinyatakan statis karena ini berarti bahwa instance tertentu dari kelas yang mengandung metode faktor tidak diperlukan.
Untuk penjelasan yang baik tentang bagaimana, kapan dan di mana lihat MSDN
sumber
static
kelas tidak memiliki contoh sama sekali.