C#里面静态方法和静态变量的一点问题?
发布网友
发布时间:2023-05-01 23:35
我来回答
共2个回答
热心网友
时间:2023-10-13 23:34
对于运行以及效率是没有多大区别的,但是对于有追求的程序员是有很大区别的。
实例方法必须在实例化一个具体对象之后才能访问,为了封装性,对象的成员变量不允许外部程序访问,只允许实例方法访问,也就是做代码访问权限隔离。这种机制对于面向对象思想指导下编程是必须的也是标准。
但是我们往往有时候需要做一些数据处理,而这些处理即属于某个类但又具有通用性,而往往又具有一定代码量(需要封装在一个方法/函数内),并且其处理的数据与类中其他成员变量毫无关系。
此种情况下把方法封装在某个类时很麻烦,会存在几个问题:
1、被处理数据与该类业务逻辑完全无关却封装在类中很奇怪,对于整体架构造成破坏(会导致逻辑松散)。
2、创建对象过程过于冗长(因为外部程序很多不同地方都会经常调用,太累赘,有强迫症的人还要注意每次设置为null)
3、代码不美观可读性差(代码多了容易视觉繁杂)
举个例子,假如你在开发一个数据库系统,设计了一个类,专门处理数据库日期时间的存取以及显示转换(比如按指定格式输出),现在假设其中封装了一个检查日期有效性的公共方法,该方法一方面服务于类成员,另一方面,在很多场合,比如通过用户界面接受用户输入日期时也要校验,此时我们希望先进行校验,如果数据有效(包括其他数据)再创建数据对象把数据传递下去(因为创建对象有消耗),这时候希望不实例化的情况下调用类方法,这就是静态方法的需求场景之一。
假设这个自定义日期类为MyDate,下面是伪代码,
Date d;
d=GetUIDate();//取得界面日期数据
if (MyDate.IsValid(d)) //直接使用类名访问静态方法 ,无需事先定义对象名和new
{
//其他处理代码
}
热心网友
时间:2023-10-13 23:34
参考以下:
实例方法的话,需要对类进行实例化以后才可以使用
静态方法,可以直接通过类名.方法名进行访问。对于静态成员也是如此
在哪里调用的话,区别不大