首页 新闻 会员 周边 捐助

类A复制类B

0
悬赏园豆:30 [已解决问题] 解决于 2013-11-17 12:04

比如有两个类A、B,其中类B是密封类,已经是封装好的,那我想自定义类A,里面属性、方法跟类B是一模一样的,有什么方法可以实现吗,请指导,急急急

GIS之家的主页 GIS之家 | 初学一级 | 园豆:59
提问于:2013-11-08 12:58
< >
分享
最佳答案
0

继承B就是了

收获园豆:20
angelshelter | 大侠五级 |园豆:9914 | 2013-11-08 20:55

不能被继承

GIS之家 | 园豆:59 (初学一级) | 2013-11-08 20:59

类B是密封类

袁家小黑球 | 园豆:1045 (小虾三级) | 2013-11-09 10:58

@袁家小黑球: 那就创一个类,把B包起来吧。

angelshelter | 园豆:9914 (大侠五级) | 2013-11-09 12:04

@angelshelter: 我想要的就是这样的效果,把B包起来,就是不知道如何下手,有什么思路么,或者举例个简单的demo,大哥

GIS之家 | 园豆:59 (初学一级) | 2013-11-09 12:54

@oolili: 记得给分哦。。假设B有一个属性name,和一个方法show();

 

class A(){

  private String name;

  private B b;

  A(B b){

  this.b=b;

  }

 

  public setName(String name){

    this.b.setName=name;

  }

  public getName(){

    return b.getName();

  }

 

  public void show(){

    b.show();

  }

}

反正所有A类的方法都是调用B的方法。

angelshelter | 园豆:9914 (大侠五级) | 2013-11-09 13:31

@angelshelter: 大哥,这样子A类实例化时候,保证调用的属性、方法都是B类了的么,假如是这样的话,那就达到我的目的了

GIS之家 | 园豆:59 (初学一级) | 2013-11-09 13:35

@oolili: 有个问题,实例化A类时候,传入对象时B类的,我想要传入对象是A类的,但是实现的函数时候调用是B类的,达到包装欺骗的效果,伪装A类,实现B类所有功能

GIS之家 | 园豆:59 (初学一级) | 2013-11-09 13:42

@oolili: 是呀,不过比较麻烦,B有多少属性和方法,A都要重写一遍。然后就和B一个样子了。

 

对了,还可以改A的构造函数,和B一样,这样B就是A,A就是B了。

 

假设B的构造函数是B(String a,int c)

 

A的构造函数是A(String a,int c){

  this.b = new B(a,c);

}

angelshelter | 园豆:9914 (大侠五级) | 2013-11-09 13:44

@angelshelter: 大哥,问你啊,那B类的事件呢,在A类该怎么写呢,比如鼠标单击事件,能说说吗

GIS之家 | 园豆:59 (初学一级) | 2013-11-10 11:35

@oolili: 你说的B类是解发源?就是事件的触发对象,比发button一样的东东?

angelshelter | 园豆:9914 (大侠五级) | 2013-11-10 11:47

@angelshelter: 是呀 

GIS之家 | 园豆:59 (初学一级) | 2013-11-10 12:54

@oolili: B类有控件触发事件的

GIS之家 | 园豆:59 (初学一级) | 2013-11-10 12:55

@oolili: 那你就把那些事件方法也加上

angelshelter | 园豆:9914 (大侠五级) | 2013-11-10 13:04

@angelshelter: 比如B类有事件:

public delegate void DemoBEentHandler(); //声明委托
public event DemoBEentHandler DemoBShow; //声明事件

 

在A类中怎么写呢

GIS之家 | 园豆:59 (初学一级) | 2013-11-10 13:51

@angelshelter: 还有个问题,B类属性在C#是这种情况的呢public string name { get; set; },在A类该怎么重写呢,大哥,麻烦你了

GIS之家 | 园豆:59 (初学一级) | 2013-11-10 14:13
其他回答(5)
0

你说的复制指什么?  你是不知道B的具体定义还是什么?

不知道的话用反射看看。

waiter | 园豆:1000 (小虾三级) | 2013-11-08 13:14

B类是API,里面具体属性、函数方法都是知道的,而A类是自己定义的,想把B类的命名空间改为自己定义的,你说反射,可以详细说说吗

支持(0) 反对(0) GIS之家 | 园豆:59 (初学一级) | 2013-11-08 13:17
0

类的名称空间是不能在运行时修改的,通过反射能得到B类的所有类的信息如  Type type =  typeof(B);  

Zery | 园豆:6151 (大侠五级) | 2013-11-08 13:27
0

应该是在类A里保存一个类B的实例吧,同时把类B所拥有的公共属性、方法在类A中都写一遍,然后里面的执行就是直接调用类B的对应的属性或者方法

收获园豆:5
诶碧司 | 园豆:1912 (小虾三级) | 2013-11-08 18:25

可以详细的说说吗,听上去感觉可行的样子,能详细的举个例子么,大哥

支持(0) 反对(0) GIS之家 | 园豆:59 (初学一级) | 2013-11-08 20:27
0

诶碧司  的思路是可以的,我写了个demo供你参考:

namespace DemoB
{
    public sealed class B
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
}

namespace DemoA
{
    public class A
    {
        DemoB.B _Bobj = new DemoB.B();
        public string Address { get; set; }


        public void SetDefaultInfo()
        {
            this._Bobj.Name = "Aaron";
            this._Bobj.Age = 18;
            this.Address = "China";
        }
    }

}
收获园豆:5
袁家小黑球 | 园豆:1045 (小虾三级) | 2013-11-09 11:06
0

如果类的访问级别没有问题的话,那在A类中定义一个方法,

1 public B CreateInstance()
2 {
3        B b = new B();
4 }

这样的话A类中定义一个变量或属性接收这个方法的返回值,不就拥有了B类中的所有成员。

轻狂の书生 | 园豆:1042 (小虾三级) | 2013-11-09 18:45

不是很看懂,可以举个例子吗

支持(0) 反对(0) GIS之家 | 园豆:59 (初学一级) | 2013-11-09 18:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册