Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 扩展能否访问同一程序集中的内部方法并被外部使用?_C#_.net - Fatal编程技术网

C# 扩展能否访问同一程序集中的内部方法并被外部使用?

C# 扩展能否访问同一程序集中的内部方法并被外部使用?,c#,.net,C#,.net,在下面的代码段中,假设这两个类都在同一个程序集中,那么外部程序集调用.DoSomethingToSomeClass()是否可以在其他类上,或者这会对我的安全问题大发雷霆吗 public class SomeClass { internal void DoSomething() { //hah! } } public static OtherClassExtension { public static DoSomethingToSomeClass(this OtherCl

在下面的代码段中,假设这两个类都在同一个程序集中,那么外部程序集调用
.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)成员

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

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


我看不出为什么不可以,这应该是可行的,而且您正在调用一个公共类,该类在它自己的程序集中调用一个内部方法。

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


也许你可以传递一些类,比如参数,但这完全是设计决定。

+1(抵消)我看这个问题没有任何错误。也许我没看到什么。请说明。查看一段代码是否可以编译的一个简单方法是将其放入LINQPad并运行它。(顺便说一句,我不是反对者)。c#编译器可能会bark@StriplingWorrior,他首先需要编译dll以测试他的理论。据我所知,你不能在林帕德这样做。但可能是错误的。下一票按钮上写着“这个问题没有显示任何研究成果;它不清楚或没有用处”,所以我怀疑下一票是针对第一部分或最后一部分的。特别是一位用户回答了100多个带有C#:-)标记的问题,我的不确定性与作为一个扩展是否会导致这一行为如同边界已经移动一样有关。谢谢你清理它@Jimmy扩展方法只是添加了一点语法糖分的方法,所以对于普通方法来说几乎所有正确的东西对于扩展方法来说都是正确的。