【问题标题】:Make a public class only extensible within an assembly?使公共类只能在程序集中扩展?
【发布时间】:2015-05-23 20:51:54
【问题描述】:

在 C# 中可以实现这样的事情吗?一般情况下 CLR 呢?

public sealed-outside class MySample
{
}

【问题讨论】:

  • 简单回答:不。你想要达到什么目的会导致你想要这样做?我怀疑公共接口和内部类会满足您的需求,
  • @DavidArno 这是一个普遍的问题。我的具体情况是一个基本的非抽象自定义属性,我想保护它不被扩展到框架之外。这并不重要,我只是想知道是否有理由不在语言中提供这种可能性。
  • 您可能正在寻找 Inherited 设置为 false 的 [AttributeUsage]。
  • 添加一个抽象的内部方法。
  • @HansPassant 属性 application 可继承与属性 definition 可继承无关。

标签: c# clr access-modifiers sealed


【解决方案1】:

仅当您声明所有内部构造函数时。然后只有同一程序集中的类才能调用继承所需的基类构造函数。如果其他人需要能够创建实例,您可能需要一些公共静态工厂方法。

如果你想学究气,这只会阻止语言级别的继承,而不是 CLR 级别。您仍然可以通过声明一些相互递归的构造函数在技术上创建一个继承类。 Jon Skeet demonstrated 这是一个例子。

【讨论】:

  • 感谢您的建议。不幸的是,这只是一种解决方法。例如。您不能使用工厂来实例化自定义属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-16
  • 2014-01-26
  • 1970-01-01
相关资源
最近更新 更多