我是C#新手,所以请耐心等待我.
好的,所以我在不同的程序集中有两个需要互相引用的类:
namespace AssemblyA
{
class A
{
private B MyB { get; set; }
}
}
namespace AssemblyB
{
class B
{
private A MyA { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
我知道不允许循环引用,所以我使用的是一个接口:
namespace AssemblyA
{
public interface IB
{
// whatever 'A' needs of 'B'
}
class A
{
private IB MyB { get; set; }
}
}
namespace AssemblyB
{
class B : AssemblyA.IB
{
private A MyA { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
这有效,但它的缺点是暴露IB给世界其他地方.我想做的是做IB internal.但后来B无法从中衍生出来.
在C++中,我会结交B朋友并完成.我知道C#没有朋友(双关语没有打算,但是注意到了),所以我必须做不到.我已经读过它有一个属性,但是这将使整个程序集的整个程序集都A可以访问B,这是我不喜欢的.有没有办法避免这种情况?
事实上你被误导了 - C#/ .NET确实支持朋友集会.您希望将两个程序集标记为Google 朋友程序集,MSDN将其定义如下:
可以从另一个程序集访问程序集中的内部类型或内部成员.
因此,只需将以下属性放在项目中的一个代码文件中(我会选择AssemblyInfo.cs).
[assembly:InternalsVisibleTo("name_of_friend_assembly")]
Run Code Online (Sandbox Code Playgroud)