关于c#中internal用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于c#中internal用法相关的知识,希望对你有一定的参考价值。

我用了msdn中的方法,如下:
该示例包含两个文件:Assembly1.cs 和 Assembly2.cs。第一个文件包含内部基类 BaseClass。在第二个文件中,实例化 BaseClass 的尝试将产生错误。
复制代码

// Assembly1.cs
// compile with: /target:library
internal class BaseClass

public static int intM = 0;


复制代码
// Assembly1_a.cs
// compile with: /reference:Assembly1.dll
class TestAccess

static void Main()

BaseClass myBase = new BaseClass(); // Error CS0122



在此示例中,使用与示例 1 中所用的文件相同的文件,并将 BaseClass 的可访问性级别更改为 public。还将成员 IntM 的可访问性级别更改为 internal。在此例中,您可以实例化类,但不能访问内部成员。

复制代码
// Assembly2.cs
// compile with: /target:library
public class BaseClass

internal static int intM = 0;


复制代码
// Assembly2_a.cs
// compile with: /reference:Assembly1.dll
public class TestAccess

static void Main()

BaseClass myBase = new BaseClass(); // Ok.
BaseClass.intM = 444; // CS0117



我是在控制台来运行这些代码的,分别创建了assembly1.cs和assembly2.cs来复制上面的代码来运行,但是运行的结果跟它说的结果不一样.它说在创建Bassclass:BaseClass myBase = new BaseClass(); // Error CS0122时会出错,但是我运行通过了 这是怎么回事?请高手指教

internal 关键字是类型和类型的成员 访问修饰符。 只有在同一程序集的文件中,内部类型或成员才是可访问的,如下例所示:

public class BaseClass 

    // Only accessible within the same assembly
    internal static int x = 0;

从当前程序集或从包含类派生的类型,可以访问具有访问修饰符 protected internal 的类型或成员。

有关 internal 与其他访问修饰符的比较,请参见可访问性级别(C# 参考)和访问修饰符(C# 编程指南)。

有关程序集的更多信息,请参见程序集和全局程序集缓存(C# 和 Visual Basic)。

内部访问通常用于基于组件的开发,因为它使一组组件能够以私有方式进行合作,而不必向应用程序代码的其余部分公开。 例如,用于生成图形用户界面的框架可以提供 Control 和 Form 类,这两个类通过使用具有内部访问权限的成员进行合作。 由于这些成员是内部的,它们不向正在使用框架的代码公开。

从定义具有内部访问能力的类型或成员的程序集外部引用该类型或成员是错误的。

参考技术A internal的访问权限是当前的程序集,也就是exe或者dll文件本回答被提问者和网友采纳 参考技术B 你的运行没有错误,不可能吧。我按照你的方法运行了一次,报了3个地方的错误。在Assembly1中你的BaseClass 中的成员变量申明为static在Main中是没有办法访问的。

还有你的internal 是在整个程序集中有效的。还有你的问题很模糊
参考技术C 难!

C#中Internal class与静态类说明

C#中的internal访问修饰符表示 访问仅限于当前程序集

但是注意,internal修饰符修饰的类中,可以有public的成员变量和成员方法等

Static 关键字作为修饰符可以用于类、方法和成员变量上。其含义是对于整个应用程序生命周期内,访问该修饰符修饰的对象/方法/变量都引用到同一实例(内存地址)

 

internal class Counter
{        

public static int count = 0;        
public static void Increase()        {            Thread.Sleep(10);            Counter.count++;        } }

以上是关于关于c#中internal用法的主要内容,如果未能解决你的问题,请参考以下文章

internal 和 public 区别

在C#中使用反射调用internal的方法

C#中Internal class与静态类说明

C#中的public protected internal private

在C#中internal关键字是啥意思?

c# protected public private internal