c#-有什么方法可以创建无法在程序集之外实现的公共.NET接口?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-有什么方法可以创建无法在程序集之外实现的公共.NET接口?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1123字,纯文字阅读大概需要2分钟。
内容图文
![c#-有什么方法可以创建无法在程序集之外实现的公共.NET接口?](/upload/InfoBanner/zyjiaocheng/661/a38461ce09e84e5786a64efa21216a08.jpg)
为了维护.NET中的二进制向后兼容性,通常不能向公共类和接口添加新的抽象方法.如果这样做,则针对扩展/实现您的类/接口的程序集的旧版本构建的代码将在运行时失败,因为它无法完全扩展/实现新版本.但是,对于类,有一个方便的解决方法:
public abstract class Foo {
internal Foo() { }
}
因为Foo的构造函数是内部的,所以我程序集中的任何人都不能扩展Foo.因此,我可以向Foo添加新的抽象方法而不必担心向后兼容性,因为我知道另一个程序集中的任何类都不能扩展Foo.
我的问题是,接口是否有类似的技巧?我可以创建一个公共接口,并以某种方式保证我程序集中的任何人都不能创建该接口的实现吗?
解决方法:
不,你不能那样做.但是,然后考虑到接口的重点是通过定义契约来定义实现的行为,这是有道理的.
但是,您可以做的是创建一个从您的公共接口继承的内部接口:
public interface IPublicInterface {
/* set-in-stone method definitions here */
}
internal interface IChildInterface : IPublicInterface {
/* add away! */
}
这样可以防止与其他程序集的任何向后兼容性问题,同时仍然允许您隐藏其他方法.
当然,缺点是您必须记住在需要时将其转换为IChildInterface,而不是简单地将其用作IPublicInterface
但是,老实说,如果您确实想定义一些仅汇编的功能,同时仍然要求最终用户为某些方法定义自己的实现,那么最好的选择可能是抽象类.
内容总结
以上是互联网集市为您收集整理的c#-有什么方法可以创建无法在程序集之外实现的公共.NET接口?全部内容,希望文章能够帮你解决c#-有什么方法可以创建无法在程序集之外实现的公共.NET接口?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。