C# 基础系列--类二(静态类及扩展方法)
继续上一篇的内容,其实这两篇没有什么关联。这次我们 要静态类的学习。我们先新建两个项目--AssemblyLibrary(类库)和ConsolTest(控制台)
静态类是一种很特殊的类,他有四个特点:
仅包含静态成员。 无法实例化。 不能被继承 不能包含实例构造函数。
AssemblyLibrary:
public static class StaticClass
{
//string a; 错误:仅包含静态成员
static string a;
static StaticClass()
{
a = "1";
}
//错误:没有实例构造函数
//public StaticClass()
//{
//}
}
public class SS : BuTongClass //错误:不能被继承 StaticClass
{
public SS()
: base(1)
{ }
}
public class BuTongClass
{
public readonly static int i = 0;
static BuTongClass()
{
i = 1;
}
public bool Equle;
public BuTongClass(int a)
{
if (a == i)
Equle = true;
}
}
ConsolTest
static void Main(string[] args)
{
BuTongClass butong = new BuTongClass(1);
//StaticClass sc = new StaticClass(); 错误:不能被实例化
Console.WriteLine(butong.Equle);
Console.Read();
}
错误的地方我都注释掉了。也附上了错误点在那里。
运行的结果:True。
如果你想对静态的只读变量继续赋值
public readonly static int i = 0; 这样可以赋值,也可以再静态构造函数中赋值
静态构造函数里面的变量必须是静态成员而且只能执行一次。如果利用好这个特性,我们可以完成一些意想不到的效果,比如单例模式
传统的代码代码:
View Code
public class SingeClass { private static SingeClass _instance; private static object o = new object(); public static SingeClass GetInstance() { if (_instance == null) { lock (o) { if (_instance == null) _instance = new SingeClass(); } } return _instance; } }
我们可以利用静态构造函数的特点,实现单例:
public class SingeClass
{
private static SingeClass _instance;
static SingeClass()
{
_instance = new SingeClass();
}
private SingeClass(){}
public static SingeClass GetInstance()
{
return _instance;
}
}
昨天晚上写的不够严谨,现在把默认构造函数设置为private,让外部不能实例化 。这里谢谢@看风景的人同学的提醒,
静态构造函数,相对而言,使用的不多,他的调用时.net做的如果有多个静态构造函数,那个先调用,我们不得而知。静态类,现在使用的最多的扩展方法。在framework3.5以上,
名称空间System.Linq就使用了大量的扩展方法
扩展方法,他必须是静态类。扩展的方法也必须是静态方法。

这是system.linq中的一个扩展方法的事例:我们可以看到的个是 static 类型扩展方法名(this 扩展的对象,xxxxx)
我们直接来个简单的例子
class Program
{
static void Main(string[] args)
{
string str = "1"; ;
Console.WriteLine(str.ToInt());
Console.Read();
}
}
public static class StringEx
{
public static int ToInt(this string source)
{
int result;
if (int.TryParse(source, out result))
return result;
return 0;
}
}
很简单吧~~~我还是必须喜欢这个扩展方法的。直接用智能提示,代码量少了,你只要敲个.就可以 出 方法名字,前提是,你已经应用 了 你 写的扩展方法。
坚持星期一到四,一天一篇。直到我写完基础篇,就当是自我复习。

浙公网安备 33010602011771号