是否将静态方法的修饰符从内部更改为公开更改?

时间:2016-01-21 11:04:08

标签: c#

如果我将公共类中静态方法的访问修饰符从内部更改为公共,它是否会破坏调用该方法的外部组件?

注意:使用 InternalsVisibleTo 属性,外部程序集可以调用内部方法:

[assembly: InternalsVisibleTo("TheExternalAssembly")]    
namespace TheAssemblyWithInternalMethod 

4 个答案:

答案 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)

嗯,正如internal已经说过的那样。无法从其他程序集访问该方法。一些额外的info

所以不,它不会破坏任何东西。它将提供新的机会。

答案 3 :(得分:-1)

不会在从内部变为公众时不会破坏。如果相反,那么破解代码的可能性就更高。你可以参考杰弗里里希特书中的Cr,通过C#来清楚地提到它。 "除非我希望课程在我的大会之外公开曝光,否则将课程设为内部课程。所以没问题