Erişilebilirlik düzeylerini kullanma kısıtlamaları (C# Başvurusu)
Bildirimde bir tür belirttiğinizde, türün erişilebilirlik düzeyinin üyenin erişilebilirlik düzeyine mi yoksa başka bir türe mi bağlı olduğunu denetleyin. Örneğin, doğrudan temel sınıfın en az türetilmiş sınıf kadar erişilebilir olması gerekir. Aşağıdaki bildirimler, temel sınıfın BaseClass
değerinden MyClass
daha az erişilebilir olması nedeniyle derleyici hatasına neden olur:
class BaseClass {...}
public class MyClass: BaseClass {...} // Error
Aşağıdaki tabloda, bildirilen erişilebilirlik düzeylerindeki kısıtlamalar özetlemektedir.
Bağlam | Açıklamalar |
---|---|
Sınıflar | Bir sınıf türünün doğrudan temel sınıfı en az sınıf türünün kendisi kadar erişilebilir olmalıdır. |
Arabirimler | Arabirim türünün açık temel arabirimleri en az arabirim türünün kendisi kadar erişilebilir olmalıdır. |
Temsilciler | Temsilci türünün dönüş türü ve parametre türleri en az temsilci türünün kendisi kadar erişilebilir olmalıdır. |
Sabitler | Sabitin türü en az sabitin kendisi kadar erişilebilir olmalıdır. |
Alanlar | Bir alanın türü en az alanın kendisi kadar erişilebilir olmalıdır. |
Yöntemler | Bir yöntemin dönüş türü ve parametre türleri en az yöntemin kendisi kadar erişilebilir olmalıdır. |
Veri Erişimi | Bir özelliğin türü en az özelliğin kendisi kadar erişilebilir olmalıdır. |
Etkinlikler | Bir olayın türü en az olayın kendisi kadar erişilebilir olmalıdır. |
Dizin Oluşturucular | Dizin oluşturucunun türü ve parametre türleri en az dizin oluşturucunun kendisi kadar erişilebilir olmalıdır. |
İşleçler | Bir işlecin dönüş türü ve parametre türleri en az işlecin kendisi kadar erişilebilir olmalıdır. |
Oluşturucular | Bir oluşturucunun parametre türleri en az oluşturucunun kendisi kadar erişilebilir olmalıdır. |
Örnek
Aşağıdaki örnekte farklı türlerdeki hatalı bildirimler yer alır. Her bildirimi izleyen açıklama beklenen derleyici hatasını gösterir.
// Restrictions on Using Accessibility Levels
// CS0052 expected as well as CS0053, CS0056, and CS0057
// To make the program work, change access level of both class B
// and MyPrivateMethod() to public.
using System;
// A delegate:
delegate int MyDelegate();
class B
{
// A private method:
static int MyPrivateMethod()
{
return 0;
}
}
public class A
{
// Error: The type B is less accessible than the field A.myField.
public B myField = new B();
// Error: The type B is less accessible
// than the constant A.myConst.
public readonly B myConst = new B();
public B MyMethod()
{
// Error: The type B is less accessible
// than the method A.MyMethod.
return new B();
}
// Error: The type B is less accessible than the property A.MyProp
public B MyProp
{
set
{
}
}
MyDelegate d = new MyDelegate(B.MyPrivateMethod);
// Even when B is declared public, you still get the error:
// "The parameter B.MyPrivateMethod is not accessible due to
// protection level."
public static B operator +(A m1, B m2)
{
// Error: The type B is less accessible
// than the operator A.operator +(A,B)
return new B();
}
static void Main()
{
Console.Write("Compiled successfully");
}
}
C# dili belirtimi
Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.