什么相当于“朋友”? C Sharp 中的关键字?
C Sharp 中的“friend”关键字相当于什么?
如何使用“内部”关键字?
我读到“internal”关键字是 C# 中“friend”的替代品。
我在我的 C# 项目中使用一个 DLL,我拥有该项目的源代码,但我不想修改现有代码。 我继承了该类,并且可以以任何我想要的方式使用我继承的类。 问题是父类中的大部分代码都有受保护的方法。 使用朋友是否可以以某种方式访问或调用这些受保护的方法?
What is the equivalent of a 'friend' keyword in C Sharp?
How do I use the 'internal' keyword?
I have read that 'internal' keyword is a replacement for 'friend' in C#.
I am using a DLL in my C# project that I have the source code for and yet I do not want to modify the existing code. I have inherited the class and I can use my inherited class any way I want. The problem is that most of the code in the parent class has protected methods. Will using a friend somehow make it possible to access or call these protected methods?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
您可以使用关键字访问修饰符
内部
< /a> 将类型或类型成员声明为只能由同一程序集中的代码访问。您可以使用
InternalsVisibleToAttribute
在
System.Rutime 中定义的类.CompilerServices
将类型声明为只能在同一程序集中或指定程序集中的代码访问。您可以像使用任何其他访问修饰符(例如
私有。 也就是说:
您可以按如下方式使用第二个:
这两个都可以正确地视为 C# 中的
friend
的等价物。受
保护
的方法已可供派生类。You can use the keyword access modifier
internal
to declare a type or type member as accessible to code in the same assembly only.You can use the
InternalsVisibleToAttribute
class defined inSystem.Rutime.CompilerServices
to declare a type as accessible to code in the same assembly or a specified assembly only.You use the first as you use any other access modifier such as
private
. To wit:You use the second as follows:
Both of these can rightly be considered the equivalent of
friend
in C#.Methods that are
protected
are already available to derived classes.不,“内部”与“朋友”不同(至少是 C++ 的“朋友”),
朋友指定该类只能由一个特定类访问。
内部指定该类可由程序集中的任何类访问。
No, "internal" is not the same as "friend" (at least the C++ 'friend')
friend specifies that this class is only accessible by ONE, particular class.
internal specifies that this class is accessible by ANY class in the assembly.
内部
是 VB.NETfriend
关键字的 C# 等效项(而不是替换)用法如下
它基本上是一个访问修饰符,规定标记为内部的类/函数/变量/属性的可访问性就好像它对程序集是公共的一样被编译,并且对任何其他程序集都是私有的
internal
is the C# equivalent of the VB.NETfriend
keyword, as you have guessed (as opposed to a replacement)Usage is as follows
It, basically, is an access modifier that stipulates that the accessibility of the class / function / variable / property marked as internal is as if it were public to the Assembly it is compiled in, and private to any other assemblies
您的子类将能够访问您继承的类的受保护成员。
您是否希望将这些受保护成员的访问权限授予另一个类?
Your subclass will be able to access the protected members of the class you inherit.
Are you looking to give access to these protected members to another class?
这是我用来添加类似于 C++ 的
friend
关键字的行为的奇怪技巧。 这仅适用于嵌套类 AFAIK。protected
或private
接口。这是来自 Unity 的示例。
我认为这只适用于嵌套类。 如果您想对常规类执行此操作,则需要将它们嵌套在部分外部类中,这在理论上应该有效,并使用
protected
或private
嵌套接口(或两个,如果你愿意的话)为他们提供对彼此隐私的访问......结果是错误的。Here's a weird trick I used for adding behaviour akin to C++'s
friend
keyword. This only works for nested classes AFAIK.protected
orprivate
interface with the variables you'd like to give access to via properties.Here's an example from Unity.
I think this only works for nested classes. In case you want to do this with regular classes, you'd need to nest them inside a partial outer class, which should work in theory, and use a
protected
orprivate
nested interface (or two, if you're inclined) for providing them access to each other's privates... that came out wrong.内部相当于朋友。 受保护的方法仅在同一类中或从继承者中可用。 如果您尝试从继承者公开受保护的方法,则可以将它们包装在公共方法中。
Internal is the equivalent of friend. A protected method is only available within the same class or from an inheritor. If you're trying to expose protected methods from an inheritor, you can wrap them in public methods.
将一个大类分成两个部分类文件可以达到所需的朋友效果。 它并不等效,但在某些情况下有效。
Splitting a big class in two partial class-files can achive the desired friend-effect. It is not equivalent, but it works in some cases.