Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何模拟C++;C#和VB.NET中的朋友?_C#_C++_Vb.net_Friend - Fatal编程技术网

如何模拟C++;C#和VB.NET中的朋友?

如何模拟C++;C#和VB.NET中的朋友?,c#,c++,vb.net,friend,C#,C++,Vb.net,Friend,因为有时候,我真的需要一个朋友 我可以想出以下窍门: 只读包装类。friend保留指向可修改对象的指针,而其他人只能访问包装器 Write delegate-friend将对委托的引用作为参数之一提供给对象的构造函数,构造函数用可用于修改对象的私有方法的地址填充它 反思——显然是个坏主意。包括完整性 多个程序集-将您的朋友放在一个单独的程序集中,并设置您的修改器方法internal 公开可修改对象,但向修改器方法添加注释“这是一个基础结构方法-不要调用它!” 添加System.Componen

因为有时候,我真的需要一个朋友

我可以想出以下窍门:

  • 只读包装类。friend保留指向可修改对象的指针,而其他人只能访问包装器
  • Write delegate-friend将对委托的引用作为参数之一提供给对象的构造函数,构造函数用可用于修改对象的私有方法的地址填充它
  • 反思——显然是个坏主意。包括完整性
  • 多个程序集-将您的朋友放在一个单独的程序集中,并设置您的修改器方法
    internal
  • 公开可修改对象,但向修改器方法添加注释“这是一个基础结构方法-不要调用它!”
  • 添加
    System.ComponentModel.EditorBrowsable(System.ComponentModel)。
    EditorBrowsableState.Never)
    属性设置为您只希望朋友访问的成员,以对IntelliSense隐藏该成员
  • 隐式接口实现-请参阅注释
  • 这份清单详尽吗?有人能按性能下降的顺序对其进行排序吗?降低整洁度的顺序?任何关于何时使用哪个的建议?

    您也可以使用该属性

    对于给定的程序集a,您可以指定哪些其他程序集可以访问a的内部类型。

    在c中,嵌套类(如私有类)与c++中的friend类似:

    public class Root
    {
       private int a; // accessible for friendroot
    
       public int b;
    
       public class FriendOfRoot
       {          
          public int d;
       }
    
    }
    

    编辑:如果这里提供的使用嵌套类模拟friend对您有用,那么在性能上它与常规类一样足够快(在编译中,所有事情都将确定,并且没有强制转换问题和开销)。

    您可能忘记了嵌套类型。当然,还有隐式接口实现。没有真正隐藏方法,但您需要做一些事情来访问它(转换到此接口)。如何使用嵌套类型来模拟friend?