如果我将公共类中静态方法的访问修饰符从内部更改为公共,它是否会破坏调用该方法的外部组件?
注意:使用 InternalsVisibleTo 属性,外部程序集可以调用内部方法:
[assembly: InternalsVisibleTo("TheExternalAssembly")]
namespace TheAssemblyWithInternalMethod
答案 0 :(得分:3)
有可能。
想象一下这个共享的库代码:
namespace SharedLibrary
{
public class SharedLibraryClassOne
{
public static void PotentialCollisionMethod()
{
}
internal static void SharedLibraryMethodTwo()
{
}
}
public class SharedLibraryClassTwo
{
internal static void PotentialCollisionMethod()
{
}
public static void SharedLibraryMethodThree()
{
}
}
}
这是一个链接到库的控制台应用程序:
using static SharedLibrary.SharedLibraryClassOne;
using static SharedLibrary.SharedLibraryClassTwo;
namespace StackOverflowChallenge20160121
{
class Program
{
static void Main(string[] args)
{
PotentialCollisionMethod(); // Invokes SharedLibraryClassOne.PotentialCollisionMethod
SharedLibraryMethodThree();
}
}
}
这一切都是编译。但是,如果我将SharedLibraryClassTwo.PotentialCollisionMethod
从内部更改为公共,我的依赖应用程序将不再编译。
只需将内部方法公开,我在以前的编译代码中出现以下错误:
错误CS0121:以下方法之间的呼叫不明确或 properties:' SharedLibraryClassOne.PotentialCollisionMethod()'和 ' SharedLibraryClassTwo.PotentialCollisionMethod()'
答案 1 :(得分:1)
错误...... 否?如果它是内部的,则还没有外部呼叫者。对他们来说,它看起来像是一个方法,这应该是一个不间断的变化。
答案 2 :(得分:1)
答案 3 :(得分:-1)
不会在从内部变为公众时不会破坏。如果相反,那么破解代码的可能性就更高。你可以参考杰弗里里希特书中的Cr,通过C#来清楚地提到它。 "除非我希望课程在我的大会之外公开曝光,否则将课程设为内部课程。所以没问题