是否可以访问接口类型的其他成员?

use*_*480 2 c#

我很好奇这是否可能,如果没有,那么它背后的原因是什么,以及如何处理这种编程方案?

假设我有这个界面:

public interface IBook
{
    void BookClient();
    void CancelClient();
}
Run Code Online (Sandbox Code Playgroud)

我有这个实现上述接口的类:

public class Photographer : IBook
{
     public void BookClient()
     {
        // do something
     }

     public void CancelClient()
     {
        // do something
     }

     // non-interface methods
     public void SaveClients()
     {
        // do something
     }

     public void DeleteClients()
     {
        // do something
     }
} 
Run Code Online (Sandbox Code Playgroud)

现在,如果我将此类分配给我的代码中的某个接口类型,例如:

IBook photo;
photo = new Photographer();
Run Code Online (Sandbox Code Playgroud)

是否有可能做到这一点:

// non-interface member from the Photographer class
photo.SaveClients();
Run Code Online (Sandbox Code Playgroud)

有人可以在这个问题上理顺我,也许可以指出我正确的方向.谢谢.

Mar*_*zek 11

是的,这是可能的,但你有你的投photoPhotographer第一:

// non-interface member from the Photographer class
((Photographer)photo).SaveClients();
Run Code Online (Sandbox Code Playgroud)

仅使用photo.SaveClients()语法是不可能的,因为您可以轻松地创建另一个类:

class TestClass : IBook
{
    public void BookClient()
    {
       // do something
    }
     public void CancelClient()
    {
       // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

并使用它:

IBook photo;
photo = new Photographer();
photo = new TestClass();

// what should happen here?
photo.SaveClients();
Run Code Online (Sandbox Code Playgroud)

因此,只要将变量用作接口实现,就只能访问该接口中声明的成员.但是,该对象仍然是一个类实例,因此您可以使用其他类成员,但必须先显式转换为该类型.