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) {

我有一个C#程序和以下(我想是新手)问题:

命名空间对象引用
{
公共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