【问题标题】:Access Modifiers and multiple assemblies访问修饰符和多个程序集
【发布时间】:2015-12-31 10:02:08
【问题描述】:

我有两个单独的项目(Dll)。

项目 1:包含抽象类。

项目 2:扩展项目 1 中抽象类的特定具体类。

我希望我的抽象类只能在派生的类中访问。通常我会使用“受保护”,但由于它们不在同一个程序集中,所以不能使用。

Project 1 类应该使用哪些访问修饰符?

编辑:类定义EX

namespace all.Animals
{
    public abstract class Animal
    {
      ...
    }
}

【问题讨论】:

  • @Damien_The_Unbeliever 也许我误解了这一点,但是当我尝试使用protected时,我会得到:"Modifier is not valid for class XXX"
  • 你的全班定义是什么?
  • 如@Darin Dimitrov 指出的那样使用internal
  • @DovydasSopa 那行不通。因为项目 2 不在同一个程序集中,因此不是内部的。

标签: c# access-modifiers


【解决方案1】:

如果您希望 Project1 程序集中定义的抽象类仅对 Project2 程序集中的类可见,则将这些类设为 internal,然后在 Project1 上设置 [InternalsVisibleTo] 程序集级别属性。

请记住,虽然可以访问 Project1 类的程序集被烘焙到此 Project1 程序集中。因此,如果明天您决定 Project3 也需要访问这些类,您将需要重新编译 Project1。

【讨论】:

  • 也许我理解错了,但为什么我不能使用应该是理想修饰符的protected
  • 因为 .NET 中没有 protected 类这样的概念。 protected 关键字只对成员有意义。对于课程,您需要在 publicinternal 之间进行选择。如果您选择 internal 然后将其与我的回答中建议的 InternalsVisibleTo 属性结合使用,您将能够限制允许访问这些抽象类的程序集。
猜你喜欢
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
  • 2016-01-29
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多