大家好,这里是阮清寒……目前萌萌哒微软MCP一只。这几篇文来分享一些关于考试的内容……也希望各位能看到有所收获,同时也希望各位如果需要备考70-483,能取得一个好成绩。
不多说废话了。今天给大家带来70-483的几道比较典型的题目以及题目分析,这里全是原创,希望各位会喜欢。
You hava the following requirements:
initialize the _catalog field to a Catalog instance.
initialize the _catalog field only once
ensure that application code acquires a lock only when the _catalog object must be instantiated.
You need to meet the requirement. which three code segments should you insert in sequence at line 09?
public class Kios
{
static Catalog _catalog = null;
static object _lock = new object();
public static Catalog Catalog
{
get
{
return _catalog;
}
}
}
Correct Answer:
A: lock(_lock)
B: if(_catalog != null ) _catalog= new Catalog();
C: if(_catalog != null )
D: if(_catalog == null ) _catalog = new Catalog();
E: if(_catalog == null)
我相信,国内的兄弟,对英文永远是一段伤。那么各位需要特殊服务吗?好吧,我相信需要——
你有以下需求:
实现_catalog单例,
同时这个实例只能实现一次,
需要确保多线程环境下,这个对象只能被实例化一次。
后面的我就不赘述了,代码估计各位都看得懂。……好吧,很显然这是一种双重锁的用法。相信各位不是新手,培训得到时候都教过,
正解很显然……判空加锁再判空。
于是,你认为我是不是说了一大堆废话。根本没有什么讲解,只是在逗比一样挖苦了一下人就公布答案……实际上确实是,但这道题我想说的并不是题目本身。而是这道题的实际作用。
这是单例的一种变体,单例五种实现方式,估计长时间不去碰设计模式那本书,很多人就记得其中一种,或者就只记得懒汉饿汉两种模式了。
public class Kios
{
private static Kios instance = new Kios();
private Kios(){}
public static Kios getInstance()
{
return instance;
}
}
饿汉,不用说了,啥也没干呢,就直接实例化出来。那么我们把默认值的赋值放在获取里面,就成了懒汉了
public static Kios getInstance()
{
if(instance == null)
{
instance = new Kios();
}
return instance;
}
不过缺陷也是显而易见,多线程不安全,所以才有上面的双重锁机制。
另外两种……静态内部类,这个东西其实还是蛮有意思的,虽然不常用,不过对于public static class内部嵌套class的做法,我只在损管和舆情两个项目用过。只是一种偷懒的写法。不过这东西还是符合设计的。毕竟面向对象原则,只要实现的通,程序依赖于更高层的抽象而不是具体的实现。而且要遵循开闭源。因此,写出这种代码并不为过。
关于枚举器,其实.net也是有对应的机制的,我们可以利用泛型代码。这里是引用的wuha555的代码,具体没有策措施。代码如下:
class Singleton<T> where T: class,new()
{
private static T _instance;
private static readonly object syslock=new object();
public static T getInstance() {
if (_instance == null)
{
lock (syslock) {
if (_instance == null)
{
_instance = new T();
return _instance;
}
else {
return _instance;
}
}
}
else {
return _instance;
}
}
}
class myclass : Singleton<myclass>
{
public void ss()
{
Console.WriteLine("111");
}
}
关于单例,我就讲到这里。在下面的内容里,我讲继续讲解其他的70-483题目