扩展可以访问同一程序集中的内部方法并由外部方法使用吗?

本文关键字:方法 外部 内部 访问 集中 程序集 程序 扩展 | 更新日期: 2023-09-27 18:06:15

在下面的代码片段中,假设这两个类都在同一个程序集中,外部程序集可以在OtherClass上调用.DoSomethingToSomeClass();吗?还是这会让我担心安全问题?

public class SomeClass
{
  internal void DoSomething()
  {
    //hah!
  }
}
public static OtherClassExtension
{
  public static DoSomethingToSomeClass(this OtherClass target)
  {
    new SomeClass().DoSomething();
  }
}

扩展可以访问同一程序集中的内部方法并由外部方法使用吗?

这绝对可以在没有安全问题的情况下工作。想象一下,如果不这样做,我们生活的世界将是什么样子:您编写的任何public方法都必须只调用其他 public方法。访问修饰符的作用是让你知道你的类的哪些部分(以及你写的哪些类)可以通过调用代码直接访问。在某些链中,它们可以被执行,这是不相关的。

这不会引起在。net方面的任何安全问题,也不应该。在公共方法中,你必须能够使用内部(/private/protected)成员。

对于这可能导致的潜在安全问题的解决方案是:创建public成员的开发人员必须知道他们在做什么。

"内部关键字是类型和类型成员的访问修饰符。内部类型或成员只能在同一程序集中的文件中访问"取自MSDN.

我不明白为什么不,这应该工作,你正在调用一个公共类调用内部方法在它自己的程序集。

老实说,所提供的代码没有任何问题。

你可以像传递参数一样传递someeclass,但这完全是设计决定的。