下面是简化的类。每个命名空间都在单独的.cproj中。我在构建z.exe.时遇到了"B是在一个未引用的程序集中定义的"问题
我添加了ctor A(字符串s),因为我不想在每个z中都包含y.dll(我有很多z)。如何做到这一点?
一种方法是在A(Bb)或A(字符串s)中添加另一个参数,这样它们就有不同数量的参数,但这对我来说并不好
//namespace x
using y;
public class A
{
public A(string s)
public A(B b)
}
//namespace y
public class B
{
public static explicit operator B(string s)
}
//namesapce z
using x;
public class C
{
void M()
{
string s = "";
A(s);
}
}
我知道实现这一点的唯一方法是使第二个A构造函数内部化:
//namespace x
public class A
{
public A(string s)
internal A(B b)
}
如果您有其他程序集需要使用此构造函数;您可以考虑使用InternalsVisibleTo
属性。
为什么不从A派生另一个类,然后隐藏不需要的构造函数?
public class ADerived : A
{
public ADerived(string s) : base (s)
{
}
}
然后使用命名空间/程序集z中的CCD_ 2?
您的类A引用B(作为构造函数参数),因此任何使用类A的东西都需要知道要构建的类B。
顺便说一句,对于要构建的代码,在a类声明之前缺少一个using y;
。