C#中internal关键字有什么用?弄个实例过来看看,谢谢。

Jave.Lin 2009-06-08 04:24:06
如题。
...全文
459 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
virusswb 2010-02-26
  • 打赏
  • 举报
回复
一个程序集就是一个dll文件
jinlingoo1 2009-06-12
  • 打赏
  • 举报
回复
同一程序集(Assembly),可访问
Jave.Lin 2009-06-12
  • 打赏
  • 举报
回复
说错了。

不是10楼的朋友,是14楼的。14楼的朋友说的和MSDN的差不多。

差点就给错分了。
Jave.Lin 2009-06-12
  • 打赏
  • 举报
回复
看下面的MSDN解说。
总得来说和10楼的朋友说的差不多。

internal(C# 参考)


internal 关键字是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的,如下例所示:
public class BaseClass
{
// Only accessible within the same assembly
internal static int x = 0;
}

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

有关程序集的更多信息,请参见程序集和全局程序集缓存(C# 编程指南):

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

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

尽管不能用 C# 重写 internalvirtual 方法,但可以用某些语言(如使用 Ilasm.exe 的文本 Microsoft 中间语言 (MSIL))重写它。

示例

该示例包含两个文件: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(); // 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
}
}
yudi010 2009-06-11
  • 打赏
  • 举报
回复
同一命名空间
rabbitlzx 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 vrhero 的回复:]
引用 10 楼 evaa006 的回复:

同一程序集也就是同一命名空间吧,个人认为,有待大家讨论

同一程序集中可以使用多个命名空间,同样的同一命名空间可以存在于多个程序集中...

程序集是物理边界,命名空间是逻辑边界...要分清楚...
[/Quote]
up
Jave.Lin 2009-06-11
  • 打赏
  • 举报
回复
谢谢大家回答。

我现在又有问题。

那啥又叫程序集呢?
vrhero 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 evaa006 的回复:]
同一程序集也就是同一命名空间吧,个人认为,有待大家讨论
[/Quote]
同一程序集中可以使用多个命名空间,同样的同一命名空间可以存在于多个程序集中...

程序集是物理边界,命名空间是逻辑边界...要分清楚...
Dobzhansky 2009-06-08
  • 打赏
  • 举报
回复
如果程序集上有属性:
// 可以写在 AssemblyInfo.cs 中啊
[assembly: InternalsVisibleTo("assembly.file")]

那么, 本程序集中的 internal 也可以被程序集 assembly.file.dll ( or assembly.file.exe) 中的类访问.

  • 打赏
  • 举报
回复
都被别人讲完了
我就讲个通俗点的,就是同一个dll或者exe中的。
注意不是同一命名空间,不要被误导。
我不同程序集同样可以定义相同命名空间。
oec2003 2009-06-08
  • 打赏
  • 举报
回复
同一程序集可以访问

类不过不写访问修饰符 默认就是internal
evaa006 2009-06-08
  • 打赏
  • 举报
回复
同一程序集也就是同一命名空间吧,个人认为,有待大家讨论
evaa006 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 windstore 的回复:]
引用 4 楼 vrhero 的回复:

错误,是同一程序集(Assembly)...去看MSDN吧...



正解。。。
[/Quote]
应该是一样的吧!
windstore 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 vrhero 的回复:]

错误,是同一程序集(Assembly)...去看MSDN吧...
[/Quote]

正解。。。
zenowolf 2009-06-08
  • 打赏
  • 举报
回复
相同程序级可以访问~
feiyun0112 2009-06-08
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/7c5ka91b.aspx

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

http://feiyun0112.cnblogs.com/
vrhero 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 evaa006 的回复:]
同一命名空间可以访问
[/Quote]
错误,是同一程序集(Assembly)...去看MSDN吧...
wxm3630478 2009-06-08
  • 打赏
  • 举报
回复
protected internal ??
evaa006 2009-06-08
  • 打赏
  • 举报
回复
internal 关键字是类型和类型成员的访问修饰符,内部成员只有在同一程序集中的文件内才是可访问的
internal 可访问域限定于类所在的程序内
evaa006 2009-06-08
  • 打赏
  • 举报
回复
同一命名空间可以访问
加载更多回复(1)
先自己复习一下,看看下面的C#问题都能回答上来么? 1.静态变量和非静态变量的区别? 2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed 修饰符是干什么的? 7.override 和 overload 的区别? 8.什么是索引指示器? 9.new 修饰符是起什么作用? 10.this 关键字的含义? 11.可以使用抽象函数重写基类的虚函数吗? 12.密封类可以有虚函数吗? 13.如果基类的虚属性只有一个属性访问器,那么继承类重写该属性后可以有几个属性访问器?如果基类有 get 和 set 两个呢? 14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗? 15.接口可以包含哪些成员? 16.类和结构的区别? 17.接口的多继承会带来哪些问题? 18.抽象类和接口的区别? 19.别名指示符是什么? 20.如何释放非托管资源? 21.P/Invoke是什么? 22.StringBuilder 和 String 的区别? 23.explicit 和 implicit 的含义? 24.params 有什么用? 25.什么是反射? 以下是我做的一份参考答案(C# 语言范畴之内),如果有不准确、不全面的,欢迎各位朋友指正! 1.静态变量和非静态变量的区别?答:静态变量:静态变量使用 static 修饰符进行声明在所属类被装载时创建通过类进行访问所属类的所有实例的同一静态变量都是同一个值非静态变量:不带有 static 修饰符声明的变量称做非静态变量在类被实例化时创建通过对象进行访问同一个类的不同实例的同一非静态变量可以是不同的值示例:

111,117

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧