C# 使用泛型类C进行奇怪的命名空间类型化#
我有一个C#程序和以下(我想是新手)问题:C# 使用泛型类C进行奇怪的命名空间类型化#,c#,generics,namespaces,C#,Generics,Namespaces,我有一个C#程序和以下(我想是新手)问题: 命名空间对象引用 { 公共A类 { 公共B B; 公开无效方法a() { b=新的b(本); } } } 在同一项目的不同文件中: namespace ObjectReference { public class B { public A<TypeC> a; public B(A<TypeC> myObjA) {
命名空间对象引用
{
公共A类
{
公共B B;
公开无效方法a()
{
b=新的b(本);
}
}
}
在同一项目的不同文件中:
namespace ObjectReference
{
public class B
{
public A<TypeC> a;
public B(A<TypeC> myObjA)
{
a = myObjA;
}
}
}
命名空间对象引用
{
公共B级
{
公共A;
公共B(A)
{
a=myObjA;
}
}
}
在定义了类A的文件中,我在第“b=new b(this);
”:“参数1:无法从'ObjectReference.A'转换为'ObjectReference.A'”
”行上得到此错误
我已经尝试了所有的方法,我无法解决这个问题,我不明白为什么会出现这种情况,所有的类都定义在同一个命名空间ObjectReference中(即类A、B和类型C)。就像在类A中,它认为类的类型是ObjectReference.A
,而在类B中,它认为类型是ObjectReference.A
请告知
谢谢您试图告诉类B有一个构造函数接受类型a的实例,而不接受任何类型规范。您可以像类a一样更新接受类型参数的类B:
public class B<T>
{
...
}
公共B类
{
...
}
或者,您可以使类b的构造函数更具体,为其指定类型参数,如:
public B(A<string> myObjA)
{
a = myObjA;
}
public B(A myObjA)
{
a=myObjA;
}
有关此类型参数的更多信息,我建议您查找一些有关泛型的信息。外面有很多书和文章
编辑
我看到你更新了代码。这仍然是不够的,除非类型C是一个实际的类型,你还没有给我们。然而,这将是一个非常难以理解的命名场景。基本上,在类A中定义了一个泛型类型参数,该参数可以在名称TypeC下指定,而在类B中,则假定存在具有此名称的类型。我仍然建议您阅读泛型。您试图告诉类B有一个构造函数接受类型a的实例,而不接受任何类型规范。您可以像类a一样更新接受类型参数的类B:
public class B<T>
{
...
}
公共B类
{
...
}
或者,您可以使类b的构造函数更具体,为其指定类型参数,如:
public B(A<string> myObjA)
{
a = myObjA;
}
public B(A myObjA)
{
a=myObjA;
}
有关此类型参数的更多信息,我建议您查找一些有关泛型的信息。外面有很多书和文章
编辑
我看到你更新了代码。这仍然是不够的,除非类型C是一个实际的类型,你还没有给我们。然而,这将是一个非常难以理解的命名场景。基本上,在类A中定义了一个泛型类型参数,该参数可以在名称TypeC下指定,而在类B中,则假定存在具有此名称的类型。我仍然建议您阅读泛型。您试图将a的泛型实现传递到B的构造函数中,该构造函数接受a的非泛型实现。不幸的是,这不起作用,需要重写类B 然而,工作原理是:
namespace ObjectReference
{
public class B<TypeC>
{
public A<TypeC> a;
public B(A<TypeC> myObjA)
{
a = myObjA;
}
}
}
命名空间对象引用
{
公共B级
{
公共A;
公共B(A)
{
a=myObjA;
}
}
}
然后称之为:
b = new B<TypeC>(this);
b=新的b(本);
您正试图将a的泛型实现传递给B的构造函数,该构造函数接受a的非泛型实现。不幸的是,这不起作用,需要重写类B
然而,工作原理是:
namespace ObjectReference
{
public class B<TypeC>
{
public A<TypeC> a;
public B(A<TypeC> myObjA)
{
a = myObjA;
}
}
}
命名空间对象引用
{
公共B级
{
公共A;
公共B(A)
{
a=myObjA;
}
}
}
然后称之为:
b = new B<TypeC>(this);
b=新的b(本);
您所写的内容相当于:
public class A<T>
{
public B b;
public void MethodA()
{
b = new B(this);
}
}
public class B
{
public A<TypeC> a;
public B(A<TypeC> myObjA)
{
a = myObjA;
}
}
然后您可以这样调用代码:
var a = new A<TypeC>();
a.MethodA();
var a=newa();
a、 方法a();
我希望这能有所帮助。您所写的内容与此相当:
public class A<T>
{
public B b;
public void MethodA()
{
b = new B(this);
}
}
public class B
{
public A<TypeC> a;
public B(A<TypeC> myObjA)
{
a = myObjA;
}
}
然后您可以这样调用代码:
var a = new A<TypeC>();
a.MethodA();
var a=newa();
a、 方法a();
我希望这能有所帮助。A
是一种所谓的开放泛型类型,不能作为方法参数传递
要解决此问题,您还需要将B
设置为通用。在B
中使用A
现在使A
成为构造的开放泛型类型。这仅仅意味着B的泛型类型参数“派生”到A
你可能想看看这张照片
命名空间对象引用
{
公共B级
{
公共A;
公共B(A)
{
a=myObjA;
}
}
}
A
是一种所谓的开放泛型类型,不能作为方法参数传递
要解决此问题,您还需要将B
设置为通用。在B
中使用A
现在使A
成为构造的开放泛型类型。这仅仅意味着B的泛型类型参数“派生”到A
你可能想看看这张照片
命名空间对象引用
{
公共B级
{
公共A;
公共B(A)
{
a=myObjA;
}
}
}
所有部件都在同一个程序集中吗?显示类型C的声明。您的文件中是否有使用
语句的?似乎有两个TypeC
的定义。所有的东西都在同一个程序集中吗?显示TypeC
的声明。您的文件中是否有使用
语句的?似乎有两种定义Ty