首页 / C# / c# – 使用接口创建对象
c# – 使用接口创建对象
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 使用接口创建对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1552字,纯文字阅读大概需要3分钟。
内容图文
![c# – 使用接口创建对象](/upload/InfoBanner/zyjiaocheng/762/c683ea38444044e8bd916df97ccdc778.jpg)
在C#中,我们可以继承多个接口.在这种情况下,如果创建了一个对象,它只是隐藏属性或方法,还是编译器会避免创建和内存分配给其他接口的那些?例如,我有两个接口和一个类如下
interface IExample1
{
void E1Test1();
void E1Test2();
}
interface IExample2
{
void E2Test1();
void E2Test2();
}
class Example : IExample1, IExample2
{
public void E1Test1()
{
throw new NotImplementedException();
}
public void E1Test2()
{
throw new NotImplementedException();
}
public void E2Test1()
{
throw new NotImplementedException();
}
public void E2Test2()
{
throw new NotImplementedException();
}
}
当我创建像,
IExample1 IE1 = new Example();
IExample2 IE2 = new Example();
编译器是否会为包括所有方法在内的两个接口创建完整对象,并将其隐藏为无法访问的接口?或者只是使用可用于特定界面的方法创建?
解决方法:
当你使用它的构造函数(在使用new …之后)实例化一个类时,总是在内存中有一个完整的clas实例.没有接口实例这样的东西.
另一方面的接口只是该实例的某种视图.因此,在您的示例中,您的实例上存在四种方法.但是,您可能会也可能不会从IExample1或IExample2类型的引用中访问这些方法.例如.你不能在IExample1类型的引用上使用E2Test1,尽管底层实例确实有这个方法:
IExample1 i1 = new Example();
现在调用i1.E1Test1()将编译得很好,而i1.E2Test1()则不会,因为该方法是在另一个接口上定义的.但是,您可以简单地将i1引用的实例强制转换为另一个接口,并以这种方式访问??该成员:
IExample i2 = (IExample2) i1;
i2.E2Test1();
从TimSchmelters开始编辑评论:如果你的Example-class只实现了IExample1而没有实现另一个接口,那么肯定会失败并在运行时产生InvalidCastException.因此,在这种情况下,Example-class的实例只会在IExample1上定义成员,而不是在IExample2上定义.然后投射到后者是没有意义的.
内容总结
以上是互联网集市为您收集整理的c# – 使用接口创建对象全部内容,希望文章能够帮你解决c# – 使用接口创建对象所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。