C#’ta “Koruma Düzeyi Nedeniyle xxx Erişilebilir Değil. Yalnızca Ortak Türler İşlenebilir” Hatası ve Çözümü

Merhaba,

C#’ta kodlama yaparken ansızın aşağıdaki gibi bir hatayla karşılaşabilirsiniz.

Koruma Düzeyi Nedeniyle xxx Erişilebilir Değil. Yalnızca Ortak Türler İşlenebilir.

Bu olası hatanın temel sebebi algoritmada kullandığınız yapıların erişim belirleyicileriyle alakalıdır.

Örneğin, XmlSerializer sınıfıyla çalışırken bu olası hatayı şu şekilde alabiliriz;

    class Program
    {
        static void Main(string[] args)
        {
            OrnekSinif ornek = new OrnekSinif();
            ornek.OrnekProperty = 3;

            var xml = new XmlSerializer(typeof(OrnekSinif));
            using (StreamWriter sw = new StreamWriter(@"D:\Ornek.xml"))
            {
                xml.Serialize(sw, ornek);
            }

            Console.Read();
        }
    }

    class OrnekSinif
    {
        public int OrnekProperty { get; set; }
    }

Yukarıdaki örnek kod bloğunda gördüğünüz gibi “OrnekSinif” isminde bir sınıfımız mevcut. XmlSerializer sınıfı ile ilgili sınıfın xml modelini çıkartmaktayız. Tabi bu işlemleri yaparken 8. satırdaki “typeof(OrnekSinif)” komutu ile “OrnekSinif” isimli sınıfı kullanacağımızı belirtiyoruz. “OrnekSinif” isimli sınıfın ise erişim belirleyicisi private olduğuna dikkatinizi çekerim. Projemizi bu şekilde derleyip çalıştırdığımızda ilgili olası hatayla aşağıdaki gibi karşı karşıya kalmaktayız.

C#'ta Koruma Düzeyi Nedeniyle xxx Erişilebilir Değil. Yalnızca Ortak Türler İşlenebilir Hatası ve Çözümü

İşte bu ve benzer misallerde alınan ilgili hatanın çözümü, ilgili yapıların erişim belirleyicisini public yapmaktan geçer. public dışında protected yahut internal olarak da şansınızı deneyebilirsiniz.

Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar dilerim…

Bunlar da hoşunuza gidebilir...

3 Cevaplar

  1. Ahmet dedi ki:

    Deneyipte çalışmayan arkadaşlar programıda public yapsınlar.Bende de aynı problem varken bütün sınıflarım public olmasına rağmen aynı hata devam ediyordu. “class Program” kısmını public yaparak çalıştırdım.

  2. AKIN dedi ki:

    BEN aynı hatayı Range nesnesini kullandığımda alıyorum. Ama nasıl public yapılacağını anlamadım. 🙁 KODLARIMI AŞAĞIDA PAYLAŞIYORUM. DESTEKLERİNİZİ RİCA EDİYORUM

      private void button2_Click(object sender, EventArgs e)
            {
                    try
                    {
                        Microsoft.Office.Interop.Excel.Application uygulama = new Microsoft.Office.Interop.Excel.Application();
    
                        uygulama.Visible = true;
    
                        Microsoft.Office.Interop.Excel.Workbook kitap = uygulama.Workbooks.Add(System.Reflection.Missing.Value);
                        Microsoft.Office.Interop.Excel.Worksheet sayfa1 = (Microsoft.Office.Interop.Excel.Worksheet)kitap.Sheets[1];
                        int sutun = 1;
                        int satır = 1;
    
                        for (int j = 0; j < dataGridView1.Columns.Count; j++)
                        {
                            Range ayrange = (Range)sayfa1.Cells[satır, sutun + j];
                            ayrange.Value2 = dataGridView1.Columns[j].HeaderText;
    
                        }
                        satır++;
                        for (int i = 0; i < dataGridView1.Rows.Count; i++)
                        {
                            for (int j = 0; j < dataGridView1.Columns.Count; j++)
                            {
                                Range ayrange = (Range)sayfa1.Cells[satır + i, sutun + j];
                                ayrange.Value2 = dataGridView1[j, i].Value == null ? "" : dataGridView1[j, i].Value;
                                ayrange.Select();
                            }
                        }
                    }
                    catch (Exception)
                    {
    
                        MessageBox.Show("Şuanda Bir Hata Var Lütfen Akın ACAR'a Bildirin");
                    }
                }
    

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*