c# 类 ,静态类 , 静态字段, 静态方法

本周的研究内容是 类的各种形态 以及应用场景。 静态类 静态方法 , 以及静态类 的理解和应用场景。

从书上看到的一点讲解 :

1 不管类型本身是否是静态类型,都可以包含静态方法,和静态字段, 有了静态字段最好是有静态构造函数,用来初始化类型里面的静态字段?

2 对于抽象类的理解 :不是具体的感念,而是一类概念的共性 。 应该和结构的概念差不多。 比如圆形 三交行 梯形 都是一种形状,但是形状有是什么那,这个时候就可以定义一个形状的抽象类。

3 静态类 ,静态方法,静态字段应该是放到栈中,地址是确定的,所以没有创建实例的时候这个方法,字段就是确定的。 而非静态的类,分静态的方法 ,非静态的字段是放到堆中的,只有程序员创建了他们的实例 ,这个地址才是确定的,才可以进行访问。

4 不要滥用静态类和静态方法,打着oo的编程旗号 写出了太多了面向过程的程序。


为什么类里面要使用静态字段,静态方法。为什么要在一个类里面既有静态字段,方法,又有非静态字段,方法,为什么要放到一起? 这是一个疑惑。?

我倒是知道一个应用场景 就是单例模式 ? 还有其他的应用场景吗 ?

静态方法和静态字段的应用场景总结 :

A 单例模式

B 和类型的实例无关的字段和方法。

C 制作工作类

D

学习静态方法的代码 如下

using System; using System.Data; using System.Text; namespace myStu { /* 学习静态字段,静态方法 , 以及单例模式的实现 */ class programe { static void Main(string[] arg) { try { baseClass.getInstanceCount() ; baseClass obj = new baseClass() ; obj.Test() ; baseClass.getInstanceCount() ; } catch (Exception err) { Console.WriteLine(err.Message); } } } sealed class baseClass { private static int instanceCount = 0 ; public static void getInstanceCount() { Console.WriteLine("当前类的实例个数是" + instanceCount.ToString()) ; } public void Test() { instanceCount = instanceCount +1 ;//实例的个数加1 Console.WriteLine("创建实例") ; } } }c#单例模式的实现代码

using System; using System.Data; using System.Text; namespace myStu { /* 学习静态字段,静态方法 , 以及单例模式的实现 */ class programe { static void Main(string[] arg) { try { baseClass.getInstanceCount() ; //这么些是错误的,因为构造函数已经是私有的,不能创建实例,只能在单例模式里面创建baseClass obj3 = new baseClass() ; //obj.Test() ; baseClass obj = baseClass.CreateInstance() ; baseClass.getInstanceCount() ; baseClass obj1 = baseClass.CreateInstance() ; baseClass.getInstanceCount() ; } catch (Exception err) { Console.WriteLine(err.Message); } } } sealed class baseClass { static baseClass obj = null ; static int instanceCount = 0 ; public static void getInstanceCount() { Console.WriteLine("当前类的实例个数是" + instanceCount.ToString()) ; } baseClass() { instanceCount = instanceCount +1 ;//实例的个数加1 Console.WriteLine("创建实例") ; } public static baseClass CreateInstance() { if (obj == null ) { obj = new baseClass() ; //这里有一个疑问, 这样创建实例的时候不调用构造函数吗?经过验证,这里也是要调用构造函数的? } return obj ; } } }单例模式的运行结果---------- run ---------- =============== 运行C#程序 Write By 森晋科技=============== 当前类的实例个数是0 创建实例 当前类的实例个数是1 当前类的实例个数是1 =============== 程序结束 Copy cicnor 2001=============== Output completed (0 sec consumed) - Normal Termination
另外给大家说一个秘密 我的所有的测试代码都是在editpllus里面编写的,编译的,这样的好处很多,

A 脱离了编译器,代码都的自己写,很多关键字啊,什么的都记住了。

B 因为什么都是靠记忆来写代码,对很多知识的理解加深了,

所有说要是学习 就用editplus来写代码 要是工作就用vs ,智能提示的功能确实是能加快开发效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值