我很好奇这是否可能,如果没有,那么它背后的原因是什么,以及如何处理这种编程方案?
假设我有这个界面:
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
是的,这是可能的,但你有你的投photo入Photographer第一:
// 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)
因此,只要将变量用作接口实现,就只能访问该接口中声明的成员.但是,该对象仍然是一个类实例,因此您可以使用其他类成员,但必须先显式转换为该类型.
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |