保证一个类无法在外部被实例化的三种方法,哪种更加好?
哪一种从逻辑上更说的过去。
谢谢各位。 //1.单实例,构造函数是私有的,无法在外部new
public class Manager
{
private Manager()
{
} private static readonly Manager _Instance = new Manager(); public static Manager Instance
{
get
{
return _Instance;
}
} private string _Name;
public string Name
{
get
{
return _Name;
}
set
{
_Name = value;
}
} public void Buy()
{
}
} //2.静态类,无法被实例化
public static class Manager
{
private static string _Name;
public static string Name
{
get
{
return _Name;
}
set
{
_Name = value;
}
} public static void Buy()
{
}
} //3.抽象类,无法被实例化
public abstract class Manager
{
private static string _Name;
public static string Name
{
get
{
return _Name;
}
set
{
_Name = value;
}
} public static void Buy()
{
}
}
哪一种从逻辑上更说的过去。
谢谢各位。 //1.单实例,构造函数是私有的,无法在外部new
public class Manager
{
private Manager()
{
} private static readonly Manager _Instance = new Manager(); public static Manager Instance
{
get
{
return _Instance;
}
} private string _Name;
public string Name
{
get
{
return _Name;
}
set
{
_Name = value;
}
} public void Buy()
{
}
} //2.静态类,无法被实例化
public static class Manager
{
private static string _Name;
public static string Name
{
get
{
return _Name;
}
set
{
_Name = value;
}
} public static void Buy()
{
}
} //3.抽象类,无法被实例化
public abstract class Manager
{
private static string _Name;
public static string Name
{
get
{
return _Name;
}
set
{
_Name = value;
}
} public static void Buy()
{
}
}
如果提供的都是静态方法。那就用静态类,如果是单利模式,就private构造函数,提供一个静态的Instance属性。如果不希望别人实例化,做成抽象类实在是乱来了。
设计模式中,搞这样的要求:.ctor必须是private的,以此来“保证”。然后再搞个static的GetInstance方法获得全局唯一的实例。其实就算new一个对象出来,然后调用GetInstance方法,又怎么了?lz就是问这个。
仔细看完。明白了。
可能不同的情况。
如果说多个地方使用同一个对象的方式,那的确都约定好用Instanse就行了。
至于是否提供公开的构造函数,不是必须的,但如果希望从来都只存在一个,那就不要提供公开构造函数了。最近还在看设计模式…
还没看完,不知道有没有模式是类似这种。
public class Context
{
public Context(){}
public static Context CurrentContext{get;set;}
}这样配置信息就是CurrentContext,但提供公开构造函数,方便“复位”上下文环境。
Context.CurrentContext = new Context();
public class Manager
{
public static Manager GetInstance = new Manager();
private Manager()
{
}
}