using System;
interface ISample{
abstract void SampleMethod();
}
class SampleClass: ISample{
void ISample.SampleMethod(){
Console.WriteLine("SampleMethod was called.");
}
}
class Program{
public static void Main (string[] args){
SampleClass smpcls = new SampleClass();
smpcls.ISample.SampleMethod();
}
}
此代碼無縫運行。但是我必須從“SampleClass”的實體“smpcls”呼叫“ISample”介面。如何直接從“SampleClass”的實體呼叫“SampleMethod”?
例如:
...
SampleClass smpcls = new SampleClass();
smpcls.SampleMethod() //I would like to call it like this.
smpcls.ISample.SampleMethod() //Not like this
...
uj5u.com熱心網友回復:
為什么不用這個
void Main()
{
SampleClass smpcls = new SampleClass();
smpcls.SampleMethod();
}
public interface ISample
{
public void SampleMethod();
}
public class SampleClass : ISample
{
public void SampleMethod()
{
Console.WriteLine("SampleMethod was called.");
}
}
或者如果有 c# 8 也許你的意思是這個
SampleClass smpcls = new SampleClass();
smpcls.AsISampleMethod();
//or if you don't want to create an extra method
smpcls.AsISample.SampleMethod();
public interface ISample
{
void SampleMethod()
{
Console.WriteLine("SampleMethod was called.");
}
}
public class SampleClass : ISample
{
public ISample AsISample => (ISample)this;
public void AsISampleMethod()
{
AsISample.SampleMethod();
}
}
但介面的作業方式幾乎與抽象類相同
uj5u.com熱心網友回復:
SampleClass顯式實作了ISample.SampleMethod,這不是您想要的。只需將其更改為
class SampleClass: ISample{
void SampleMethod(){
Console.WriteLine("SampleMethod was called.");
}
}
uj5u.com熱心網友回復:
您必須將其轉換為介面才能訪問顯式實作的介面方法
ISample smpcls = new SampleClass();
smpcls.SampleMethod();
uj5u.com熱心網友回復:
您必須知道在實作介面的成員時有兩種方法:
實作介面
顯式實作介面
在您的示例中,您已選擇顯式實作介面。
void ISample.SampleMethod()
如果您使用此選項,那么您是在告訴類void ISample.SampleMethod()方法屬于介面而不是類。
為什么以及何時可以使用顯式選項?好吧,假設您的類中有另一個方法,它完全稱為SampleMethod() 現在,如果您實作 ISample,那么您將與此方法發生沖突,因為 ISample 包含一個同名的方法。因此,要解決此問題,您可以在介面方法上使用顯式選項。
public class SampleClass : ISample
{
void ISample.SampleMethod()
{
Console.WriteLine("interface method");
}
public void SampleMethod()
{
Console.WriteLine("class method");
}
}
在您的呼叫代碼中,這是您呼叫每個方法的方式:
SampleClass smpcls = new SampleClass();
smpcls.SampleMethod();
((ISample)smpcls).SampleMethod();
如您所見:((ISample)smpcls).SampleMethod(); 這屬于介面,因為您必須將其轉換為它。
兩種方法的輸出如下:
//class method
//interface method
如果您沒有沖突方法,則使用選項“實作介面”,它將宣告沒有介面名稱的代碼:
public class SampleClass : ISample
{
public void SampleMethod()
{
Console.WriteLine("now this method belongs to the class");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/387564.html
