C#中的友元函数是什么?

本文来自:IT宝库(https://www.itbaoku.cn)

推荐答案1

c#没有朋友函数,但是如果您希望一个类可以访问同一汇编中的另一个类,则可以使该类内部进行,例如:

  1. internal class MyClass 
  2. { 
  3. internal int MyField; 
  4. } 

现在可以从同一组件中的任何代码访问.

,如果您放置:

  1. [assembly: InternalsVisibleTo("OtherAssembly")] 

AssemblyInfo.cs 中,它将使所有 internal 类型和当前组件中的成员可见到 .

C#中的朋友函数(在C ++中找到)没有直接等效物,但这与提供类似功能一样近.

推荐答案2

我将为C ++提供解释,但它也适用于C#.

class> classs(和structs)可以具有私有,受保护和公共成员(变量和功能)只能从外部访问外部.私有和受保护的定义谁在继承时具有访问权限.

类中的朋友功能意味着此功能可以访问类/struct的私人和受保护的成员.

在此处一个示例:

  1. class SomeClass 
  2. { 
  3. public: 
  4. int Public; 
  5. private: 
  6. int Private; 
  7. } 
  8.  
  9. int function(SomeClass& cls) { return cls.Public + cls.Private; } 

将失败原因函数无法访问cls.private.
使此功能必须成为班级朋友:

  1. class SomeClass 
  2. { 
  3. friend int function(SomeClass& cls); 
  4. public: 

推荐答案3

我认为C#中没有朋友功能的概念.通过公共,私人,受保护和内部等访问修饰符来控制对类成员的访问.与C ++的"朋友"关键字没有直接等效,它允许一个类访问另一类的私人成员.

在C#中,仅在定义类中才能访问私有成员.

因此,您依靠访问修饰符来控制可见性和访问类成员,而不是使用"朋友函数".我希望你明白了.

推荐答案4

我认为 C++ Glossary by Bjarne Stroustrup (C ++的创建者)将使您对概念有更清楚的了解:

a function 声明为 friend class class ,因此它具有与类' s不必在 .而且,不,朋友不"违反 encapsulation ".

因此,如果您有一个课程,并且特别想具有一个函数,当它从外部使用时,它可以访问该类的成员,则应(或必须?)使用 朋友 功能.我发现以下示例完美地了解了为什么 friend 是必要的,我从 this page < (它具有有关继承的更详细和解释的示例).

  1. // friend functions 
  2. #include <iostream> 
  3. using namespace std; 
  4.  
  5. class Rectangle { 
  6. int width, height; 
  7. public: 
  8. Rectangle() {} 
  9. Rectangle (int x, int y) : width(x), height(y) {} 
  10. int area() {return width * height;} 
  11. friend Rectangle duplicate (const Rectangle&); 
  12. }; 
  13.  
  14. Rectangle duplicate (const Rectangle& param) 
  15. { 
  16. Rectangle res; 
  17. res.width = param.width*2; 
  18. res.height = param.height*2; 
  19. return res; 
  20. } 
  21.  
  22. int main () { 
  23. Rectangle foo; 
  24. Rectangle bar (2,3); 
  25. foo = duplicate (bar); 
  26. cout << foo.area() << '\n'; 
  27. return 0; 
  28. } 

请注意,请注意重复不是成员 矩形 类的功能,但是它可以访问其成员, width> width 高度, 通过在类中声明 friend> friend> 函数 .

也SPAN> stroustrup回答了这种类型的OOP问题 - 更详细地说,我是谁不建议阅读它?

推荐答案5

朋友函数是C ++的功能,而不是其他OOP语言中可用的功能.但是,其他OOP语言有自己的方法来实现朋友功能的功能.

a 朋友函数 C ++是一个函数,您可以使用它来查看和操纵具有私有权限的类定义和对象.朋友函数原型被声明为类定义.

非朋友函数无法访问或操纵具有私有权限的类定义或对象.

名称 " friend" 与现实生活相似,因为朋友(朋友函数)可以借用您的个人物品(类定义/对象)通常不要借给陌生人(非朋友功能).

例如:考虑,以下C ++程序

  1. #include <iostream> 
  2. using namespace std; 
  3. class Box 
  4. { 
  5. double length, width, height; 
  6. public: 
  7. friend void displayDimensions(double length, double width, double height); 
  8. Box(double len, double wid, double ht) 
  9. { 
  10. length = len; 
  11. width = wid; 
  12. height = ht; 
  13. } 
  14. }; 
  15.  
  16. /* displayDimensions isn’t a member function and its a friend function, it can access private data members of Class Box, the reference of the object of class Box is passed as argument */ 
  17.  
  18. void displayDimensions(Box b1) 
  19. { 
  20. cout << “Length of the box: “ <<b1.length << endl; 
  21. cout << “Width of the box: “ << b1.width << endl; 
  22. cout << “Height of the box: “ << b1.height << endl; 
  23. } 
  24.  
  25. int main() 
  26. { 
  27. Box b1(6.0, 8.0, 10.0); 
  28. displayDimensions(b1); //called as a regular non member function 
  29. return 0; 
  30. }