繁体   English   中英

C#构造函数重载+显式强制转换= .dll引用丢失

[英]C# constructor overload + explicit cast = .dll reference missing

简化的类如下。 每个名称空间都位于单独的.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);
        }
    }

我知道达到此目的的唯一方法是使第二个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使用ADerived

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

顺便说一句,要构建代码,请using y; 在A类声明之前。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM