C#构造函数重载+显式cast = .dll引用缺失

时间:2012-09-14 09:07:59

标签: c# .net casting constructor overloading

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

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

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

3 个答案:

答案 0 :(得分:2)

我知道实现这一目标的唯一方法是将第二个A构造函数设为内部:

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

您的类A引用B(作为构造函数参数),因此使用A类的任何内容都需要知道要构建的B类。

顺便说一下,为了构建代码,在A类声明之前缺少using y;