Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir sınıf aynı imzaya sahip bir üye içeren iki arabirim uygularsa, o üyeyi sınıfta uygulamak her iki arabirimin de bu üyeyi kendi uygulaması olarak kullanmasına neden olur. Aşağıdaki örnekte, Paint
yapılan tüm çağrılar aynı yöntemi çalıştırır. Bu ilk örnek türleri tanımlar:
public interface IControl
{
void Paint();
}
public interface ISurface
{
void Paint();
}
public class SampleClass : IControl, ISurface
{
// Both ISurface.Paint and IControl.Paint call this method.
public void Paint()
{
Console.WriteLine("Paint method in SampleClass");
}
}
Aşağıdaki örnek yöntemleri çağırır:
SampleClass sample = new SampleClass();
IControl control = sample;
ISurface surface = sample;
// The following lines all call the same method.
sample.Paint();
control.Paint();
surface.Paint();
// Output:
// Paint method in SampleClass
// Paint method in SampleClass
// Paint method in SampleClass
Ancak aynı uygulamanın her iki arabirim için de çağrılmasını istemeyebilirsiniz. Hangi arabirimin kullanıldığına bağlı olarak farklı bir uygulama çağırmak için, bir arabirim üyesini açıkça uygulayabilirsiniz. Açık arabirim uygulaması, yalnızca belirtilen arabirim aracılığıyla çağrılan bir sınıf üyesidir. Sınıf üyesini arayüzün adı ve nokta ile ön ekleyerek adlandırın. Örneğin:
public class SampleClass : IControl, ISurface
{
void IControl.Paint()
{
System.Console.WriteLine("IControl.Paint");
}
void ISurface.Paint()
{
System.Console.WriteLine("ISurface.Paint");
}
}
Sınıf üyesi IControl.Paint
yalnızca IControl
arabirimi aracılığıyla kullanılabilir ve ISurface.Paint
yalnızca ISurface
aracılığıyla kullanılabilir. Her iki yöntem uygulaması da ayrıdır ve ikisi de doğrudan sınıfında kullanılamaz. Örneğin:
SampleClass sample = new SampleClass();
IControl control = sample;
ISurface surface = sample;
// The following lines all call the same method.
//sample.Paint(); // Compiler error.
control.Paint(); // Calls IControl.Paint on SampleClass.
surface.Paint(); // Calls ISurface.Paint on SampleClass.
// Output:
// IControl.Paint
// ISurface.Paint
Açık uygulama, her iki arabirimin bir özellik ve yöntem gibi aynı adın farklı üyelerini bildirdiği durumları çözmek için de kullanılır. Her iki arabirimi de uygulamak için, bir sınıfın derleyici hatasından kaçınmak amacıyla özellik P
veya yöntem P
ya da her ikisi için açık uygulama kullanması gerekir. Örneğin:
interface ILeft
{
int P { get;}
}
interface IRight
{
int P();
}
class Middle : ILeft, IRight
{
public int P() { return 0; }
int ILeft.P { get { return 0; } }
}
Açık arabirim uygulamasının, içinde tanımlandığı türün bir üyesi olarak erişilebilir olmadığından erişim değiştiricisi yoktur. Bunun yerine, yalnızca arabirim örneği üzerinden çağrıldığında erişilebilir. Açık arabirim uygulaması için bir erişim değiştirici belirtirseniz, derleyici hatası CS0106 alırsınız. Daha fazla bilgi için bkz interface
. (C# Başvurusu).
Bir arabirimde bildirilen üyeler için bir uygulama tanımlayabilirsiniz. Bir sınıf bir arabirimden yöntem uygulamasını devralırsa, bu yönteme yalnızca arabirim türü başvurusu aracılığıyla erişilebilir. Devralınan üye ortak arabirimin bir parçası olarak görünmez. Aşağıdaki örnek, arabirim yöntemi için varsayılan bir uygulamayı tanımlar:
public interface IControl
{
void Paint() => Console.WriteLine("Default Paint method");
}
public class SampleClass : IControl
{
// Paint() is inherited from IControl.
}
Aşağıdaki örnek varsayılan uygulamayı çağırır:
var sample = new SampleClass();
//sample.Paint();// "Paint" isn't accessible.
var control = sample as IControl;
control.Paint();
Arabirimi uygulayan IControl
herhangi bir sınıf, ortak bir yöntem veya açık arabirim uygulaması olarak varsayılan Paint
yöntemi geçersiz kılabilir.