2

简化的类如下。每个命名空间都在单独的 .cproj 中。构建 z.exe 时出现“B 在未引用的程序集中定义”的问题。

我添加了 ctor A(string s) 因为我不想在每个 z 中都包含 y.dll(我有很多 z)。如何使这项工作没有混乱?

一种方法是在 A(B b) 或 A(string 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);
        }
    }
4

3 回答 3

2

我知道实现这一点的唯一方法是使第二个 A 构造函数内部:

//namespace x     
public class A     
{         
    public A(string s)         
    internal A(B b)     
}

如果您有其他程序集需要使用此构造函数;你可以考虑使用InternalsVisibleTo属性。

于 2012-09-14T09:36:14.700 回答
1

为什么不从 A 派生另一个类,然后隐藏不需要的构造函数?

public class ADerived : A
{
    public ADerived(string s) : base (s)
    {
    }
}

然后ADerived从命名空间/程序集 z 中使用?

于 2012-09-14T09:14:34.087 回答
1

您的 A 类引用 B(作为构造函数参数),因此任何使用 A 类的东西也需要知道 B 类才能构建。

顺便说一句,为了构建您的代码,using y;在 A 类声明之前缺少一个。

于 2012-09-14T09:23:53.007 回答