C#如何用已知的基类对象创建一个派生类对象。

yanghao1 2019-03-15 11:31:36
class A
{
public int x,y;
}

class B:A
{
public sting s;
}

A a=new A();
a.x=1;
a.y=2;

B b=new B();
b.s="c";
如何把a对象中的x和y的值通过a对象直接给b对象。不要用b.x=1、b.y=2。
...全文
724 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
OrdinaryCoder 2019-03-15
  • 打赏
  • 举报
回复

A a = new B();
a.x = 1;
a.y = 2;
B b = (B)a;
b.s = "123";
Console.WriteLine("x:{0},y:{1},s:{2}",b.x,b.y,b.s);
Console.ReadKey();

在new A对象的时候 都 A a =new B();
之后就可以用父类强转子类 转换过去了。
pstrunner 2019-03-15
  • 打赏
  • 举报
回复
基类,父类都添加构造赋值函数,例如: A(int tx, int ty) : x(tx), y(ty) { } A(const A& a) : x(a.x), y(a.y) { } B(const A& a) : A(a) { } 创建A对象,B对象如下: A a = new A(1,2); B b (a);
stherix 2019-03-15
  • 打赏
  • 举报
回复
你可以给class A写一个拷贝构造函数,复制其中的x,y值 这样就可以这样写B b=new B(a); 如果想凭空达到你的要求,那是不可能的
正怒月神 2019-03-15
  • 打赏
  • 举报
回复
automap https://blog.csdn.net/mingzaiwang/article/details/83747909
yanghao1 2019-03-15
  • 打赏
  • 举报
回复
引用 7 楼 OrdinaryCoder 的回复:
[quote=引用 5 楼 yanghao1 的回复:]
[quote=引用 4 楼 OrdinaryCoder 的回复:]

A a = new B();
a.x = 1;
a.y = 2;
B b = (B)a;
b.s = "123";
Console.WriteLine("x:{0},y:{1},s:{2}",b.x,b.y,b.s);
Console.ReadKey();

在new A对象的时候 都 A a =new B();
之后就可以用父类强转子类 转换过去了。

你这还是相当于用了b.x=1、b.y=2
[/quote]
并没有用B类的对象去赋值,只是把A类对象强转成B类对象了[/quote]

a对象是去年的程序就已经生成了,现在的b对象想要直接利用a对象,不想在一个一个的把a对象的属性再赋值给b对象的基类a对象部分,想自动实现将a赋值给b。
OrdinaryCoder 2019-03-15
  • 打赏
  • 举报
回复
引用 11 楼 水边2 的回复:
[quote=引用 10 楼 OrdinaryCoder 的回复:]
这样只不过把赋值的过程给封装起来了,感觉楼主不是这个意思。。。。


无论用哪种方案, bb.a = aa.a 这个实现是一定要的,
只不过看怎么用方便而已,
不可能不实现,凭空把数据传输给另一个对象的,那是玄幻[/quote]
嗯嗯 确实
游北亮 2019-03-15
  • 打赏
  • 举报
回复
引用 10 楼 OrdinaryCoder 的回复:
这样只不过把赋值的过程给封装起来了,感觉楼主不是这个意思。。。。
无论用哪种方案, bb.a = aa.a 这个实现是一定要的, 只不过看怎么用方便而已, 不可能不实现,凭空把数据传输给另一个对象的,那是玄幻
OrdinaryCoder 2019-03-15
  • 打赏
  • 举报
回复
引用 9 楼 水边2 的回复:
bb类实现一个克隆方法不就好了,类似于:

class aa
{
public int a;
public int b;
}
class bb : aa
{
public int c;
public void Clone(aa obj)
{
// 这里也可以用反射,遍历aa类的所有属性逐一赋值
this.a = obj.a;
this.b = obj.b;
}
}

aa a = new aa();
a.a = 11;
a.b = 22;

bb b = new bb();
b.Clone(a);


这样只不过把赋值的过程给封装起来了,感觉楼主不是这个意思。。。。
游北亮 2019-03-15
  • 打赏
  • 举报
回复
bb类实现一个克隆方法不就好了,类似于:

class aa
{
    public int a;
    public int b;
}
class bb : aa
{
    public int c;
    public void Clone(aa obj)
    {
        // 这里也可以用反射,遍历aa类的所有属性逐一赋值
        this.a = obj.a;
        this.b = obj.b;
    }
}

        aa a = new aa();
        a.a = 11;
        a.b = 22;

        bb b = new bb();
        b.Clone(a);

  • 打赏
  • 举报
回复
引用 5 楼 yanghao1 的回复:
[quote=引用 4 楼 OrdinaryCoder 的回复:]

  A a = new B();
            a.x = 1;
            a.y = 2;
            B b = (B)a;
            b.s = "123";
            Console.WriteLine("x:{0},y:{1},s:{2}",b.x,b.y,b.s);
            Console.ReadKey();
在new A对象的时候 都 A a =new B(); 之后就可以用父类强转子类 转换过去了。
你这还是相当于用了b.x=1、b.y=2 [/quote] 编程有经验,但是整天想的都是什么“技术”问题啊?
OrdinaryCoder 2019-03-15
  • 打赏
  • 举报
回复
引用 5 楼 yanghao1 的回复:
[quote=引用 4 楼 OrdinaryCoder 的回复:]

A a = new B();
a.x = 1;
a.y = 2;
B b = (B)a;
b.s = "123";
Console.WriteLine("x:{0},y:{1},s:{2}",b.x,b.y,b.s);
Console.ReadKey();

在new A对象的时候 都 A a =new B();
之后就可以用父类强转子类 转换过去了。

你这还是相当于用了b.x=1、b.y=2
[/quote]
并没有用B类的对象去赋值,只是把A类对象强转成B类对象了
  • 打赏
  • 举报
回复
你这个跟继承哪有半毛钱关系?
A a=new A();
a.x=1;
a.y=2;

A b=new A();
你不是就是问如何把 a 的两个属性值赋值给 b 的两个属性吗?
yanghao1 2019-03-15
  • 打赏
  • 举报
回复
引用 4 楼 OrdinaryCoder 的回复:

A a = new B();
a.x = 1;
a.y = 2;
B b = (B)a;
b.s = "123";
Console.WriteLine("x:{0},y:{1},s:{2}",b.x,b.y,b.s);
Console.ReadKey();

在new A对象的时候 都 A a =new B();
之后就可以用父类强转子类 转换过去了。

你这还是相当于用了b.x=1、b.y=2

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧