单件模式的问题(不用私有化构造函数) 想达到的目的代码:Class1 c1 = new Class1();Class1 c2 = new Class1();Console.WriteLine(ReferenceEquals(c1, c2));结果:True 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Class1 c1 = new Class1();Class1 c2 = c1 ;Console.WriteLine(ReferenceEquals(c1, c2)); public class class1 { private static class1 c1 = new class1(); public static class1 GetClass1 { get { return c1; } } } //拿的时候直接class1.GetClass1; 把Class1 设计成单例模式,public class1{ private class1(){} class1 c = new class1(); public static getInstance() { return c; }} Class1 c1 = class1.getInstance() Class1 c2 = class1.getInstance() Console.WriteLine(ReferenceEquals(c1, c2)); 绝对是要用static,因为你肯定要保留一个全局的东西在内存里,他才可能判断。无论是用托管还是非托管代码实现,你必须有个全局性的东西来保留住第一次的指针。 如果单件模型不用私有的构造函数的话那么最好的办法 是声明一个全局的静态的bool类型的变量例如:public Class SignPattern{ static bool Flag=false; public SignPattern() { if(!Flag) { Flage=true; Console.WriteLine("创建对象成功");//这里你可以写其他的,或者不写! } else { throw.Exception("提示,只能创建一个对象"); } } }Class MainClass{ static void Main() { try { SignPattern c1=new SignPattern(); } catch (Exception ex) { MessageBox.show(ex.message); } try { SignPattern c2=new SignPattern(); } catch (Exception ex) { MessageBox.show(ex.message); } }}我手写能力特别不好,如果有单词拼错,别笑话! 单件模型创建私有的构造函数可以这样写public Class SignPattern { static bool Flag=false; private SignPattern() { } Public static SignPattern GetNeWObj() { if(!Flage) { Flage=true; return new SignPattern(); } else { return null; } }} 这样写简单,但有一个缺陷,每次使用对象的时候,都要去判断对象是不是NULL,有时候我们会忘记这样做就会有麻烦,如果用上面的方法,就比较灵活。 单件模型创建私有的构造函数可以这样写public Class SignPattern { static bool Flag=false; private SignPattern() { } Public static SignPattern GetNeWObj() { if(!Flage) { Flage=true; return new SignPattern(); } else { return null; } }} 这样写简单,但有一个缺陷,每次使用对象的时候,都要去判断对象是不是NULL,有时候我们会忘记这样做就会有麻烦,如果用上面的方法,就比较灵活。 求助(谁有c# 编码规范 考试题) 怎么把datagridview的selectedrows的所有行的值赋给一个datatable? 怎么添加组件? 请问这个如何让窗体永远显示在桌面上? 如何读取这样的txt文件种的内容 子类直接调用父类中的抽象方法 水晶報表添加線 动态加载控件出现的问题 C#如何实现WinForm程序开机自启动并且不能退出 如何动态加载一个窗体 如何从DateTime类型得到一个"YYYYMMDDHHMMSS"的字符串?比如2008年3月18日17点5分8秒“20080318170508” 接收的包转化不了图片
Class1 c2 = c1 ;
Console.WriteLine(ReferenceEquals(c1, c2));
{
private static class1 c1 = new class1(); public static class1 GetClass1
{
get { return c1; }
}
}
//拿的时候直接class1.GetClass1;
{
private class1(){}
class1 c = new class1();
public static getInstance()
{
return c;
}
}
Console.WriteLine(ReferenceEquals(c1, c2));
那么最好的办法 是声明一个全局的静态的bool类型的变量
例如:
public Class SignPattern
{
static bool Flag=false;
public SignPattern()
{
if(!Flag)
{
Flage=true;
Console.WriteLine("创建对象成功");//这里你可以写其他的,或者不写!
}
else
{
throw.Exception("提示,只能创建一个对象");
}
}
}
Class MainClass
{
static void Main()
{
try
{
SignPattern c1=new SignPattern();
}
catch (Exception ex)
{
MessageBox.show(ex.message);
} try
{
SignPattern c2=new SignPattern();
}
catch (Exception ex)
{
MessageBox.show(ex.message);
} }
}
我手写能力特别不好,如果有单词拼错,别笑话!
public Class SignPattern
{
static bool Flag=false;
private SignPattern()
{
}
Public static SignPattern GetNeWObj()
{
if(!Flage)
{
Flage=true;
return new SignPattern();
}
else
{ return null; }
}
}
这样写简单,但有一个缺陷,每次使用对象的时候,都要去判断对象是不是NULL,有时候我们会忘记这样做
就会有麻烦,如果用上面的方法,就比较灵活。
public Class SignPattern
{
static bool Flag=false;
private SignPattern()
{
}
Public static SignPattern GetNeWObj()
{
if(!Flage)
{
Flage=true;
return new SignPattern();
}
else
{ return null; }
}
}
这样写简单,但有一个缺陷,每次使用对象的时候,都要去判断对象是不是NULL,有时候我们会忘记这样做
就会有麻烦,如果用上面的方法,就比较灵活。