突然想知道静态函数的来历,在网上找了一下,大家都说静态函数不用实例化,但是我想知道难道静态函数存在的目的就是节省new那句话吗?只是为了不去实例化吗?
解决方案 »
- 谁知道QQ是怎么样连接我们每个客户端的啊?
- c# 2008 读取excel时,value2为什么是null
- 关于SerialPort 切纸命令怎样写 有ESC命令 急 求解答 非常感激
- 用CustomLineCap 怎么实现填充的箭头
- 升级补丁是怎么做?
- 100分探论[简单问题,复杂想法] DataTable.Select()方法究竟是何原理?
- 求hibernate开发列子
- 在DataGrid中有一列进行超级连接,但不知如何向连接页传送参数??
- 如何在客户端下载证书
- 为啥没有tcp的命名空间?
- 如何在TextBox 输入城市编号时光标移开 Label上就显示城市名
- c# 配置文件 配置节的问题
MessageBox.Show
如果你设计成非静态的,你操作方式就是:
MessageBox mb = new MessageBox("提示信息");
mb.Title = "标题栏";
mb.Icon = ...
if(mb.ShowDialog() == DialogResult.OK)
{
}这样一个是用的烦杂,一个是每次要new一个对象。
(1)用于对静态字段、只读字段等的初始化。
(2)添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的。
(3)类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数
(4)静态构造函数是不可继承的,而且不能被直接调用。
(5)如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。
(6)任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项。
(7)如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。
你觉得在 new 一个对象的时候,还需要创建这个对象的函数部分吗。要是还需要在内存中创建这个对象的函数部分,岂不是每 new 一次都会浪费一堆内存空间来装一堆一模一样,且绝对不会改变,还一定可以裁减的东西。有见过那么蠢的做法么。
这个说的是没错的。函数都是静态的,不同的是,成员方法,提供了一个默认的参数:this。就这点区别。但是因为你需要this,那你就需要分配内存,构造,执行多余代码,如果反复操作。这个内存,cpu的消耗就不能忽略。
如果这个 this 是编译器在编译的时候加的呢?还需要这些开销么。
显然你是明白这一点的,c++下的概念,c#下应该也一样。都是有代码段的。
一时手快提交早了如果这个 this 是编译器在编译的时候加的呢?还需要这些开销么。this 是个指针来的,所以不需要新增内存,也不需要构造。至于多余的代码例如需要输出 control.Name。若要用静态方法实现,还是先要把 control 做为参数传入。跟成员函数没有区别。只是那种写法比较贴近现实而已。
呃老实说,我没有考虑过这个问题。如果要写一个成员函数,它里面居然没有用到任何与 this 想关的东西,不如直接写成静态的。
如果需要任何与 this 相关的东西,写成静态的话,需要显示传入 this;若写成成员函数,则隐式传入 this。我个人觉得没有任何区别啦。
就是这个意思,成员方法,会隐式传递this。是的。完全正确。
而静态成员函数无时无刻都没有A a;a.InstanceMethod(123); //非静态
A.StaticMethod(a,123); //静态