a类中有Show的方法,b类中也有一个Show的方法,我想根据不同的情况来定义类,然后调用同名方法例如:
class a
{
public int show(int i)
{
//实现代码
}
}
class b
{
public int show(int i)
{
//实现代码
}
}现在我想在实现类似的功能要怎么做
if (i == 1)
{
a c = new a();
}
else
{
b c = new b();
}
c.set(i);
class a
{
public int show(int i)
{
//实现代码
}
}
class b
{
public int show(int i)
{
//实现代码
}
}现在我想在实现类似的功能要怎么做
if (i == 1)
{
a c = new a();
}
else
{
b c = new b();
}
c.set(i);
2、z.show()就是调a里面的show()方法了
a类和b类都继承c 类为父类。public Class c
{
public int show(int i)
{
}
}public Class a:c
{
public int show(int i)
{
//实现代码
}
}public Class b:c
{
public int show(int i)
{
//实现代码
}
}c f;
if (i == 1)
{
f = new a();
}
else
{
f = new b();
}
f.show(i);
public Class c
{
public virtual int show(int i)
{
}
}public Class a:c
{
//重写父类方法
public override int show(int i)
{
//实现代码
}
}public Class b:c
{
//重写父类方法
public override int show(int i)
{
//实现代码
}
}c f;
if (i == 1)
{
f = new a();
}
else
{
f = new b();
}
f.show(i);
按照你的想法我写了一种实现,测试通过: public interface Do
{
int Show(int i);
} public class A:Do
{
public int Show(int i)
{
return ++i;
}
} public class B:Do
{
public int Show(int i)
{
return --i;
}
}
//下面是调用代码 int i = int.Parse(textBox1.Text.Trim());
Do d;
if (i == 1)
{
d = new A();
}
else
{
d = new B();
}
tbResult.Text = d.Show(i).ToString();
父类中定义一个虚函数(必须是虚函数)
分别在两个子类中重写这个虚函数
不过多态的优势是根据参数自动定位到相应的方法,从LZ的给的框架来看貌似没占啥便宜。
2:反射,通过反射找到各个类中指定的函数名,invoke调用
我不是说效率问题,我是说对于极简单应用没必要去OOP。“为了继承而继承,为了多态而多态”,过于技术化,就会进入设计误区。
当然,这是我一家之言。单纯作为学习目的还是非常有必要去尝试的。
参看SP1234的回复:
http://topic.csdn.net/u/20090307/19/74b12486-a3f7-4fcd-90a4-2781af4ce64c.html
{
int show(int i);
}class a:iShow
{
public int show(int i)
{
//实现代码
}
}
class b:iShow
{
public int show(int i)
{
//实现代码
}
}iShow c=null;
if (i == 1)
{
c = new a();
}
else
{
c = new b();
}
c.show(i);
vrhero 从来都是一语惊醒梦中人,呵呵,UP!!!
不过从动态语言的角度,lz要的就是Duck Typing