构造函数的问题

美丽大道 2015-01-20 03:34:15

public partial class Component1 : Component
{
public Component1()
{
InitializeComponent();
}

public Component1(IContainer container)
{
container.Add(this);

InitializeComponent();
}
}


请教下 组件里面的 带IContainer 参数的 构造函数和不带的构造函数 有什么不同 什么时间会产生差异

最好能详细讲讲他两个的区别.和带参数的构造函数的目的和解决的问题. 谢谢各位高手
...全文
139 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
美丽大道 2015-01-20
  • 打赏
  • 举报
回复
控件 一般都是拖动到 界面上.我刚测试了 应该是 vs会自动实例化 带参数的构造函数.....
於黾 2015-01-20
  • 打赏
  • 举报
回复
引用 6 楼 UnStopable 的回复:
哦 那是不是意思是 最好还是使用这个构造函数 .这样方面使用容器的概念和 XXX.Parent的方法...
使用这个构造函数,你在new这个类的时候直接传入this,那么控件就知道是谁在引用它了 否则你还需要public一个变量,并public一个方法,等new完之后,外部给变量赋值,再手动调用方法,才能把this添加进container里去
美丽大道 2015-01-20
  • 打赏
  • 举报
回复
哦 那是不是意思是 最好还是使用这个构造函数 .这样方面使用容器的概念和 XXX.Parent的方法...
  • 打赏
  • 举报
回复
IContainer就是谁在引用这个控件啊,这样做就可以通过 xxx.Parent之类的代码来找到它的上一层控件
美丽大道 2015-01-20
  • 打赏
  • 举报
回复
winfrom中 IContainer container 这个对象是干嘛用的??? 我是重载的控件....
於黾 2015-01-20
  • 打赏
  • 举报
回复
不带参数的构造函数不利于给类传递参数 因为一new它就自己执行完了,等你传递完参数,想让它继续往下执行,就要手动执行一些函数 而带参数的构造函数,你可以在new的同时传递进去,然后在构造函数里执行你要真正执行的逻辑(函数) 这样你调用的时候只需要传入一个参数,而不必每次都去手动调用里面的函数
於黾 2015-01-20
  • 打赏
  • 举报
回复
你这个例子举的没有什么实际意义,所以看不出来这两种写法到底有什么不同 而如果是个sqlhelper类,我需要在new这个类的时候就要建立一个数据库连接 那么如果仅仅使用不带参数的构造函数

public class sqlhelper
{
public string connetionStr;
public sqlhelper()
{
}
public connect()
{
//连接数据库
}
}
你就必须这样用: sqlhelper s=new sqlhelper(); s.connetionStr=str; s.connect(); 而如果用带参数的构造函数,就可以这样

public class sqlhelper
{
public sqlhelper()
{
}
public sqlhelper(connetionStr)
{
//建立连接
}
}
sqlhelper s=new sqlhelper(str);
於黾 2015-01-20
  • 打赏
  • 举报
回复
实际上就是函数的重载,这跟普通函数的重载没有多大区别 区别仅仅是构造函数是在new的时候执行的 那么不带参数的构造函数,是在你执行Component1 c=new Component1()的时候执行 而带参数的构造函数,是在你执行Component1 c=new Component1(container)的时候执行 这样写可以让你new的时候省下许多事 比如你需要给类传递一个参数 如果构造函数不带参数,你就必须这样传递 Component1 c=new Component1() c.container=container;

110,566

社区成员

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

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

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