C#获取子类属性值

C#获取子类属性值,c#,oop,inheritance,polymorphism,C#,Oop,Inheritance,Polymorphism,我试图做到这一点: class A { //attibutes } class B : A { public int classBAttribute = 5; // other attributes and methods } 我的问题是,如果我有一个类的实例,我如何获得B类的实例或访问他的属性 B b = new B(); Application.Add(b); //other form A a = Application.GetA(); B b = getBFrom

我试图做到这一点:

class A { 
   //attibutes
}

class B : A {
   public int classBAttribute = 5;
   // other attributes and methods
}
我的问题是,如果我有一个类的实例,我如何获得B类的实例或访问他的属性

B b = new B();
Application.Add(b);

//other form
A a = Application.GetA();
B b = getBFromA(a);// ???  Note:  B b = a as B; does't work i tried
我的问题是,如果我有一个类的实例,如何获得 B类的实例或访问他的属性

B b = new B();
Application.Add(b);

//other form
A a = Application.GetA();
B b = getBFromA(a);// ???  Note:  B b = a as B; does't work i tried
您的程序如何知道A的实例实际上是B类型的

B的一个实例可以用作A(因为B是A的一个特化),但不可能相反

我的问题是,如果我有一个类的实例,如何获得 B类的实例或访问他的属性

B b = new B();
Application.Add(b);

//other form
A a = Application.GetA();
B b = getBFromA(a);// ???  Note:  B b = a as B; does't work i tried
您的程序如何知道A的实例实际上是B类型的

B的实例可以用作A(因为B是A的特化),但不可能使用相反的方法。

您不能这样做——通常没有神奇的方法从基本对象创建派生对象

要启用这样的方案类
B
,需要定义一个接受
a
参数的构造函数:

public B(A a)
{
    // do whatever makes sense to create a B from an A
}
然后您可以将其用作

var b = new B(a);
当然在此之后,
a
b
将是完全不同的对象;改变一个不会影响另一个

为了避免混淆,您还应该正确使用术语:
classBAttribute
不是一个,而是一个。

您不能这样做——通常没有神奇的方法从基本对象创建派生对象

要启用这样的方案类
B
,需要定义一个接受
a
参数的构造函数:

public B(A a)
{
    // do whatever makes sense to create a B from an A
}
然后您可以将其用作

var b = new B(a);
当然在此之后,
a
b
将是完全不同的对象;改变一个不会影响另一个


为了避免混淆,您还应该正确使用术语:
classBAttribute
不是一个,而是一个。

也许我不完全理解问题或答案,但是

A
强制转换为
B
应该是可行的(只要
A
实际上也是
B


也许我不完全理解这个问题或答案,但是

A
强制转换为
B
应该是可行的(只要
A
实际上也是
B



好。您不能将A向上转换为B。简单。此外,为了将来的参考,您所指的属性称为类成员。在.NET语言中,属性是完全不同的嗯,我不知道正确的te概念,我更喜欢算法:)这就是为什么我要指出它以供将来参考。我不是在责骂谢谢你的帮助:)好的。您不能将A向上转换为B。简单。此外,为了将来的参考,您所指的属性称为类成员。在.NET语言中,属性是完全不同的嗯,我不知道正确的te概念,我更喜欢算法:)这就是为什么我要指出它以供将来参考。我不是在责骂谢谢你的帮助:)我想我必须使用数据库,因为没有数据库我无法从a中获取B。谢谢你的回答。我想我必须使用数据库,因为没有数据库我无法从a中获取B。谢谢你的回答。这就是为什么我问到这是否可能:)。谢谢你的回答。这就是为什么我想知道这是否可能:)。谢谢你的回答。我试着让他不工作B的自定义字段不是继承自A@AntonioPapa将对象强制转换为B后,即可访问该字段。“不起作用”是什么意思?这意味着b为空,当我将a转换为bI时该值返回,试图转换他不起作用b的自定义字段未从中继承A@AntonioPapa将对象强制转换为B后,即可访问该字段。“不起作用”是什么意思?它意味着b为空,当我将a转换为b时,该值返回