Saya masuk ke C # dan saya mengalami masalah ini:
namespace MyDataLayer
{
namespace Section1
{
public class MyClass
{
public class MyItem
{
public static string Property1{ get; set; }
}
public static MyItem GetItem()
{
MyItem theItem = new MyItem();
theItem.Property1 = "MyValue";
return theItem;
}
}
}
}
Saya memiliki kode ini di UserControl:
using MyDataLayer.Section1;
public class MyClass
{
protected void MyMethod
{
MyClass.MyItem oItem = new MyClass.MyItem();
oItem = MyClass.GetItem();
someLiteral.Text = oItem.Property1;
}
}
Semuanya berfungsi dengan baik, kecuali ketika saya pergi ke akses Property1
. IntelliSense hanya memberi saya " , , dan " sebagai pilihan. Ketika saya mengarahkan mouse ke atas , Visual Studio memberi saya penjelasan ini:Equals
GetHashCode
GetType
ToString
oItem.Property1
Member
MyDataLayer.Section1.MyClass.MyItem.Property1.getcannot be accessed with an instance reference, qualify it with a type name instead
Saya tidak yakin apa artinya ini, saya melakukan beberapa pencarian di Google tetapi tidak dapat mengetahuinya.
Saya memiliki masalah yang sama - meskipun beberapa tahun kemudian, beberapa mungkin menemukan beberapa petunjuk bermanfaat:
Jangan gunakan 'statis' secara serampangan!
Memahami apa yang 'statis' menyiratkan dalam hal run-time dan kompilasi semantik waktu (perilaku) dan sintaksis.
Entitas statis akan dibangun secara otomatis beberapa waktu sebelum
digunakan pertama kali.
Entitas statis memiliki satu lokasi penyimpanan yang dialokasikan, dan yang
dibagikan oleh semua orang yang mengakses entitas itu.
Entitas statis hanya dapat diakses melalui nama tipenya, bukan
melalui instance dari tipe itu.
Metode statis tidak memiliki argumen 'ini' tersirat, seperti halnya metode contoh. (Dan karena itu metode statis memiliki
overhead eksekusi lebih sedikit - satu alasan untuk menggunakannya.)
Pikirkan tentang keamanan utas saat menggunakan entitas statis.
Beberapa detail tentang statis di MSDN:
sumber
Tidak perlu menggunakan statis dalam hal ini sebagaimana dijelaskan secara menyeluruh. Anda mungkin juga menginisialisasi properti Anda tanpa
GetItem()
metode, contoh keduanya di bawah ini:Mengkonsumsi:
sumber
Ini berarti Anda memanggil metode STATIC dan mengirimkannya sebagai instance. Solusi termudah adalah menghapus Static, mis:
public
statickekosongan ExportToExcel (data IEnumerable, tali SHEETNAME) {sumber
Saya tahu ini adalah utas lama, tetapi saya hanya menghabiskan 3 jam untuk mencari tahu apa masalah saya. Saya biasanya tahu apa arti kesalahan ini, tetapi Anda bisa mengalami ini dengan cara yang lebih halus juga. Masalah saya adalah kelas klien saya (yang memanggil metode statis dari kelas instan) memiliki properti dengan tipe yang berbeda tetapi dinamai sama dengan metode statis. Kesalahan yang dilaporkan oleh kompiler sama dengan yang dilaporkan di sini, tetapi masalahnya pada dasarnya adalah nama tabrakan.
Untuk siapa pun yang mendapatkan kesalahan ini dan tidak ada yang di atas yang membantu, coba kualifikasi sepenuhnya kelas instance Anda dengan nama namespace. .. () agar kompiler dapat melihat nama persis yang Anda maksud.
sumber
Periksa apakah kode Anda mengandung namespace yang sebagian besar cocok dengan nama kelas statis Anda.
Dengan kelas Bar statis , didefinisikan pada namespace Foo , menerapkan metode Jump atau properti, kemungkinan Anda menerima kesalahan kompilator karena ada juga namespace lain yang berakhir pada Bar . Yap, fishi stuff ;-)
Jika demikian, itu berarti Anda menggunakan Bar Menggunakan; dan panggilan Bar.Jump () , oleh karena itu salah satu solusi berikut harus sesuai dengan kebutuhan Anda:
Dalam kasus saya, kesalahan kompilasi setelah mengikuti terjadi pada EF proyek repositori ( Entity Framework ) pada panggilan Database.SetInitializer () :
Kesalahan ini muncul ketika saya menambahkan MyProject.ORM. Database namespace, yang sufix ( Database ), seperti yang Anda perhatikan, cocok dengannama kelas .SetInitializer Database .
Dalam hal ini, karena saya tidak punya kendali pada EF kelas statis Database dan saya juga ingin mempertahankan namespace kustom saya, saya memutuskan untuk sepenuhnya memenuhi syarat kelas statis Database EF dengan namepace System.Data.Entity , yang menghasilkan penggunaan perintah berikut, yang kompilasi berhasil:
Semoga ini bisa membantu
sumber
Saya sampai di sini googling untuk kesalahan # # compiler C # CS0176, melalui (duplikat) pertanyaan anggota statis contoh masalah referensi .
Dalam kasus saya, kesalahan terjadi karena saya memiliki metode statis dan metode ekstensi dengan nama yang sama. Untuk itu, lihat Metode statis dan metode ekstensi dengan nama yang sama .
[Mungkin ini seharusnya komentar. Maaf saya belum memiliki reputasi yang cukup.]
sumber
Ini menyebabkan kesalahan:
Ini adalah perbaikannya:
Penjelasan:
Anda tidak dapat memanggil metode statis dari instance objek. Inti dari metode statis adalah untuk tidak terikat pada instance dari objek, tetapi sebaliknya untuk bertahan melalui semua instance dari objek itu, dan / atau untuk digunakan tanpa instance dari objek tersebut.
sumber
Untuk bidang statis Anda akan terlihat seperti:
Dari kelas lain, Anda dapat mengakses bidang staic sebagai berikut:
sumber