C#里面静态方法和静态变量的一点问题?

静态方法只能访问类静态成员,而非静态方法可以访问非静态和静态成员。那我想请问下,既然实例方法也可以调用静态成员的话,那直接在实例中调用不就好了?专门声明静态方法来调用静态... 静态方法只能访问类静态成员,而非静态方法可以访问非静态和静态成员。
那我想请问下,既然实例方法也可以调用静态成员的话,那直接在实例中调用不就好了?
专门声明静态方法来调用静态成员的意义是什么?
展开
 我来答
CodeBlove
2022-07-01 · TA获得超过3364个赞
知道小有建树答主
回答量:936
采纳率:79%
帮助的人:245万
展开全部
对于运行以及效率是没有多大区别的,但是对于有追求的程序员是有很大区别的。
实例方法必须在实例化一个具体对象之后才能访问,为了封装性,对象的成员变量不允许外部程序访问,只允许实例方法访问,也就是做代码访问权限隔离。这种机制对于面向对象思想指导下编程是必须的也是标准。

但是我们往往有时候需要做一些数据处理,而这些处理即属于某个类但又具有通用性,而往往又具有一定代码量(需要封装在一个方法/函数内),并且其处理的数据与类中其他成员变量毫无关系。
此种情况下把方法封装在某个类时很麻烦,会存在几个问题:
1、被处理数据与该类业务逻辑完全无关却封装在类中很奇怪,对于整体架构造成破坏(会导致逻辑松散)。
2、创建对象过程过于冗长(因为外部程序很多不同地方都会经常调用,太累赘,有强迫症的人还要注意每次设置为null)
3、代码不美观可读性差(代码多了容易视觉繁杂)

举个例子,假如你在开发一个数据库系统,设计了一个类,专门处理数据库日期时间的存取以及显示转换(比如按指定格式输出),现在假设其中封装了一个检查日期有效性的公共方法,该方法一方面服务于类成员,另一方面,在很多场合,比如通过用户界面接受用户输入日期时也要校验,此时我们希望先进行校验,如果数据有效(包括其他数据)再创建数据对象把数据传递下去(因为创建对象有消耗),这时候希望不实例化的情况下调用类方法,这就是静态方法的需求场景之一。
假设这个自定义日期类为MyDate,下面是伪代码,
Date d;
d=GetUIDate();//取得界面日期数据
if (MyDate.IsValid(d)) //直接使用类名访问静态方法 ,无需事先定义对象名和new
{
//其他处理代码
}
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
技术发热者

2022-07-01 · PLC及工控上位机应用
技术发热者
采纳数:1009 获赞数:1427

向TA提问 私信TA
展开全部
参考以下:
实例方法的话,需要对类进行实例化以后才可以使用
静态方法,可以直接通过类名.方法名进行访问。对于静态成员也是如此
在哪里调用的话,区别不大
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式