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.
İş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…


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.
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"); } }1. satırdaki private ‘ ı public yaptığınızda düzeleceğini düşünüyorum.