2015-10-02 72 views
-2

所以我創建了一個看起來像這樣的接口ILogger.cs不能在接口訪問方法C#

public class ILogger { 
    void Information(string message); 
} 

然後,我創建了一個類Logger.cs實現方法:

public class Logger : ILogger 
{ 
    public void Information(string message) 
    { 
     Trace.TraceInformation(message); 
    } 
} 

我打電話Information()另一個類是這樣的:

public class Another() 
{ 
    private ILogger _logger = new Logger(); 

    _logger.Information("message"); 
} 

我GE因爲保護級別,我無法訪問Information()。我明白爲什麼我有這個信息,如果我只是在界面中添加public。但是我不明白的是,因爲我已經在Logger.cs課程中設置了Information()公開,所以我不應該這樣做。

+4

我認爲你的意思是'公共接口ILogger'而不是'公共類ILogger'。 – cubrr

+2

把'I'放在一個對象的前面不會使它成爲一個接口,它只是一個命名約定。你必須使用'interface'關鍵字。 – Jonesopolis

回答

4
public interface ILogger { 
    void Information(string message); 
} 

我猜你只需要改變接口您實現接口的

4

你宣佈ILogger爲一類,不是接口。這就是爲什麼你不能使用信息方法。 c#中的默認訪問修飾符是「private」。

1
public class Another() 
{ 
    private ILogger _logger = new Logger(); 

    _logger.Information("message"); 
} 

_logger的行爲就像接口,它使Information()函數獲得接口的可見性,這是​​內部的方式。

要解決這個問題,您應該使該功能成爲公共功能。

+0

這不會完全解決這個問題,因爲'ILogger'沒有接口,因此它的方法'Information'不能是抽象的。 – HimBromBeere