public static RemindSet RS;
private void btnRemindSet_Click(object sender, EventArgs e)
{
if (RS == null)
{
RS = new RemindSet();//将主窗体对象传递过去
RS.Show();
}
else
{
RS.Activate();
}
}
把
封装成一个函数,应该怎么写?
if (RS == null)
{
RS = new RemindSet();//将主窗体对象传递过去
RS.Show();
}
else
{
RS.Activate();
}
15 个解决方案
#1
private void Foo(RemindSet rs)
{
if (RS == null)
{
RS = new RemindSet();//将主窗体对象传递过去
RS.Show();
}
else
{
RS.Activate();
}
}
{
if (RS == null)
{
RS = new RemindSet();//将主窗体对象传递过去
RS.Show();
}
else
{
RS.Activate();
}
}
#2
标题的问题:可以,用类型参数<T>或者System.Type
再看帖子的正文,跟标题完全不是一回事
再看帖子的正文,跟标题完全不是一回事
#3
没有看懂
#4
楼主的标题+内容有这么难理解吗?
还是我想得太简单了?
还是我想得太简单了?
#5
public static RemindSet RS;
private void btnRemindSet_Click(object sender, EventArgs e)
{
ShowRemindSet(RS);
}
private void ShowRemindSet(RemindSet RS){
if(RS==null)
{
RS = new RemindSet();
RS.Show();
}
else
{
RS.Activate();
}
}
#6
class Template<T> where T:IRemindSet
{
public static void Foo(T t)
{
if (t== null)
{
t=RemindSetFactory.Create(typeof(T));//将主窗体对象传递过去
t.Show();
}
else
{
t.Activate();
}
}
}
interface IRemindSet
{
void Show();
void Active();
}
#7
private void Foo(RemindSet rs) 这样就行了吧。如果是三层的话还要增加程序集的引用。
#8
我这样说吧,我写了下面的代码
但这个函数没有达到我的要求,我的意思是form可以是任意一个类,比如class1,或是class2,因为很多地方要用到这段代码,我不想重复,就想把这部分封装成一个函数。但那个form只是Form这个类,我知道这跟我的参数传递方式有关,我这种写法不对,要怎么写才能达到那种效果呢。我不知道这次表述清楚没有。。。。上面的表达确实有点问题。。
private void ReAct(Form form)
{
if (form == null)
{
form = new Form();//将主窗体对象传递过去
form.Show();
}
else
{
form.Activate();
}
}
#10
这个是比较危险的
首先,你不能保证所有传进去的类都有Show和Activate方法
甚至,你不能保证能new
最后,new时需要知道类名
所以,需要使用泛型约束
还不知道能不能约束得了
#11
你的代码中已经明确指明了形参有两个方法(SHOW ACTIVATE)并且可以实例化,那么相应的你需要的方法也需要有这种约束。并不能将所有所谓的CLASS传入。
#12
private void ReAct<T>(T form) where T : Form, new()
{
if (form == null)
{
form = new T();//将主窗体对象传递过去
form.Show();
}
else
{
form.Activate();
}
}
#13
顶楼上..
传肯定可以传 传object 就可以
但是 方法里执行的内容 就需商榷了
传肯定可以传 传object 就可以
但是 方法里执行的内容 就需商榷了
#14
wddw1986老大,如果已经约束Form了
那是不是和private void ReAct(Form form)一样了呢?
那是不是和private void ReAct(Form form)一样了呢?
#15
public Form()
如果是private void ReAct(Form form)
那么你调用的就是Form这个类的Form()构造方法,而不是你真实想要构造的子类对象。
#1
private void Foo(RemindSet rs)
{
if (RS == null)
{
RS = new RemindSet();//将主窗体对象传递过去
RS.Show();
}
else
{
RS.Activate();
}
}
{
if (RS == null)
{
RS = new RemindSet();//将主窗体对象传递过去
RS.Show();
}
else
{
RS.Activate();
}
}
#2
标题的问题:可以,用类型参数<T>或者System.Type
再看帖子的正文,跟标题完全不是一回事
再看帖子的正文,跟标题完全不是一回事
#3
没有看懂
#4
楼主的标题+内容有这么难理解吗?
还是我想得太简单了?
还是我想得太简单了?
#5
public static RemindSet RS;
private void btnRemindSet_Click(object sender, EventArgs e)
{
ShowRemindSet(RS);
}
private void ShowRemindSet(RemindSet RS){
if(RS==null)
{
RS = new RemindSet();
RS.Show();
}
else
{
RS.Activate();
}
}
#6
class Template<T> where T:IRemindSet
{
public static void Foo(T t)
{
if (t== null)
{
t=RemindSetFactory.Create(typeof(T));//将主窗体对象传递过去
t.Show();
}
else
{
t.Activate();
}
}
}
interface IRemindSet
{
void Show();
void Active();
}
#7
private void Foo(RemindSet rs) 这样就行了吧。如果是三层的话还要增加程序集的引用。
#8
我这样说吧,我写了下面的代码
但这个函数没有达到我的要求,我的意思是form可以是任意一个类,比如class1,或是class2,因为很多地方要用到这段代码,我不想重复,就想把这部分封装成一个函数。但那个form只是Form这个类,我知道这跟我的参数传递方式有关,我这种写法不对,要怎么写才能达到那种效果呢。我不知道这次表述清楚没有。。。。上面的表达确实有点问题。。
private void ReAct(Form form)
{
if (form == null)
{
form = new Form();//将主窗体对象传递过去
form.Show();
}
else
{
form.Activate();
}
}
#9
#10
这个是比较危险的
首先,你不能保证所有传进去的类都有Show和Activate方法
甚至,你不能保证能new
最后,new时需要知道类名
所以,需要使用泛型约束
还不知道能不能约束得了
#11
你的代码中已经明确指明了形参有两个方法(SHOW ACTIVATE)并且可以实例化,那么相应的你需要的方法也需要有这种约束。并不能将所有所谓的CLASS传入。
#12
private void ReAct<T>(T form) where T : Form, new()
{
if (form == null)
{
form = new T();//将主窗体对象传递过去
form.Show();
}
else
{
form.Activate();
}
}
#13
顶楼上..
传肯定可以传 传object 就可以
但是 方法里执行的内容 就需商榷了
传肯定可以传 传object 就可以
但是 方法里执行的内容 就需商榷了
#14
wddw1986老大,如果已经约束Form了
那是不是和private void ReAct(Form form)一样了呢?
那是不是和private void ReAct(Form form)一样了呢?
#15
public Form()
如果是private void ReAct(Form form)
那么你调用的就是Form这个类的Form()构造方法,而不是你真实想要构造的子类对象。