我有点复杂的问题。相反它的奇怪但它的要求。我有两个不同的命名空间,它们都有相同的类结构。 namespace2的class1继承namespace1的class1。类的每个参数都是其他类类型,每个类型都在相应的名称空间中,即Type11在名称空间1中,Type21在namesapce 2中(第一个数字表示名称空间)。现在在派生类构造函数中,我需要继承到基类构造函数。为此,我需要将每个对象的类型转换为其基类。但是当我对该对象进行类型转换时。它显示错误,如'无法将namespace1.Type21转换为namespace2.Type11'
注意: namespace1和namespace2都是不同的类库项目。我在namespace2项目中添加了namesapce1项目的referance。 Type11,Type21等本身就是类。
这里每种类型(即Type11,Type12等)都是具有方法参数和其他复杂类型属性的类。
这是我的示例代码。我试图复制与我实际面对的相同的场景。
namespace Namespace1
{
public class TestClass1
{
private Type14 obj4;
public Type15 obj5;
public TestClass1()
{
}
public TestClass1(Type11 obj1)
{
}
public TestClass1(Type11 obj1,Type12 obj2)
{
}
public TestClass1(Type11 obj1,Type12 obj2,params Type13[] obj3)
{
}
}
}
namespace Namespace2
{
public class TestClass1:Namespace1.TestClass1
{
private Type14 obj4;
public Type15 obj5;
public TestClass1():base()
{
}
public TestClass1(Type21 obj1):base((namespace1.Type11)obj1)
{
}
public TestClass1(Type21 obj1,Type22 obj2):base((namespace1.Type11)obj1,(namespace1.Type12)obj2)
{
}
public TestClass1(Type21 obj1,Type22 obj2,params Type23[] obj3):base((namespace1.Type11)obj1,(namespace1.Type12)obj2,(namespace1.Type13)obj3)
{
}
}
}
有谁能告诉我在这种情况下如何进行打字?
答案 0 :(得分:3)
我收集的内容Type11
和Type21
不属于同一类型层次结构(即,它们都不是另一个的基类)。
在这种情况下,没有“默认”方式来输入。您有两种选择:
假设您有权访问源代码,可以按如下方式编写该类型的显式转换运算符:
// Assuming Type11 and Type21 have the same Foo property
// Add the following inside Type11
public static explicit operator Type21(Type11 t)
{
return new Type21 { Foo = t.Foo };
}
然后,您可以从Type11明确地转换为Type21:
Type11 a = new Type11 { Foo = 123 };
Type21 b = (Type21)a;
您甚至可以通过将上面第一个示例中的explicit
替换为implicit
来编写隐式强制转换运算符,这样您就可以在没有显式强制转换的情况下进行分配:
Type11 a = new Type11 { Foo = 123 };
Type21 b = a;