继承B就是了
不能被继承
类B是密封类
@袁家小黑球: 那就创一个类,把B包起来吧。
@angelshelter: 我想要的就是这样的效果,把B包起来,就是不知道如何下手,有什么思路么,或者举例个简单的demo,大哥
@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: 大哥,这样子A类实例化时候,保证调用的属性、方法都是B类了的么,假如是这样的话,那就达到我的目的了
@oolili: 有个问题,实例化A类时候,传入对象时B类的,我想要传入对象是A类的,但是实现的函数时候调用是B类的,达到包装欺骗的效果,伪装A类,实现B类所有功能
@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: 大哥,问你啊,那B类的事件呢,在A类该怎么写呢,比如鼠标单击事件,能说说吗
@oolili: 你说的B类是解发源?就是事件的触发对象,比发button一样的东东?
@angelshelter: 是呀
@oolili: B类有控件触发事件的
@oolili: 那你就把那些事件方法也加上
@angelshelter: 比如B类有事件:
public delegate void DemoBEentHandler(); //声明委托
public event DemoBEentHandler DemoBShow; //声明事件
在A类中怎么写呢
@angelshelter: 还有个问题,B类属性在C#是这种情况的呢public string name { get; set; },在A类该怎么重写呢,大哥,麻烦你了
你说的复制指什么? 你是不知道B的具体定义还是什么?
不知道的话用反射看看。
B类是API,里面具体属性、函数方法都是知道的,而A类是自己定义的,想把B类的命名空间改为自己定义的,你说反射,可以详细说说吗
类的名称空间是不能在运行时修改的,通过反射能得到B类的所有类的信息如 Type type = typeof(B);
应该是在类A里保存一个类B的实例吧,同时把类B所拥有的公共属性、方法在类A中都写一遍,然后里面的执行就是直接调用类B的对应的属性或者方法
可以详细的说说吗,听上去感觉可行的样子,能详细的举个例子么,大哥
@ 诶碧司 的思路是可以的,我写了个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"; } } }
如果类的访问级别没有问题的话,那在A类中定义一个方法,
1 public B CreateInstance() 2 { 3 B b = new B(); 4 }
这样的话A类中定义一个变量或属性接收这个方法的返回值,不就拥有了B类中的所有成员。
不是很看懂,可以举个例子吗