假设有如下代码
namespace test
{
class Class1
{
public Class2 Result()
{
//return new Class2();
//这里不能这样返回值。
}
}
class Class2
{
private Class2()
{
//some code
}
}
}我要Class2不能有可使用的构造函数,但又要在Class1类里面返回一个Class2类型的值,这时这个返回语句怎么写?
或者有其他的什么解决方法没?
namespace test
{
class Class1
{
public Class2 Result()
{
//return new Class2();
//这里不能这样返回值。
}
}
class Class2
{
private Class2()
{
//some code
}
}
}我要Class2不能有可使用的构造函数,但又要在Class1类里面返回一个Class2类型的值,这时这个返回语句怎么写?
或者有其他的什么解决方法没?
解决方案 »
- C# Win ComboBox与DataGridView控件 怎么进行数据传递啊
- private bool [,] Arr=new bool[5,5];
- 像LabView那样,图控系统…希望有高手指点!
- Form1和Form2转换问题???
- 如何在access表中添加照片 字段的属性是“备注”?? 并且怎么让这个照片在C#的窗体上面显示
- 急!sos!c#里如何解决定位打印?
- ORCA的问题
- 关于smtp协议的一些问题
- C#实现Web开发!TreeView实现!!up有分
- 我的这个问题怎么做?还有我的总信誉分怎么老是减呀,结了一个贴子就少了一个,已经少了6分了
- 代码重复率高,求优化代码
- 配置文件刷新问题
{
private Class2()
{
}
public static Class2 getClass2()
{
Class2 cc = new Class2();
return cc;
}
}
这个是最基本的设计模式
我是说Class2是不能被自己创建一个新的实例的。只有在Class1里用Result()才能返回一个新的实例。就像这个例子Class2 c2;
//c2=new Class2;
//这里是不允许的。
Class1 c1 = new Class1();
c2 = c1.Result();也许这个是挺麻烦的。
就像
Regex re = new Regex(@"", RegexOptions.Singleline);
MatchCollection mc = re.Matches(str);MatchCollection本身不能创建一个新的实例,但是可以用re.Matches创建一个新的实例。我需要的就是这个意思。
=======================================================================
那是因为re.Matches(str)返回一个MatchCollection,MatchCollection mc = re.Matches(str);//把一个句柄交给引用变量mc。
要么 变态一点吧: public class W
{
public N GetN()
{
return N.CreateN(this);
}
} public class N
{
private N() { ;}
public static N CreateN(object Creater)
{
if (Creater as W != null)
{
return new N();
}
else
return null;
}
}
根据代码,Class2的确是不能创建一个新的实例,除非是在Class2的类内部创建.因为private已经是最小的访问级别了,internal的范围也比private大啊,不知道你是怎么觉得它不可以访问的,private反而可以访问到.按你说的Private也不可以的话,你只好把这个类定义为一个虚类了吧.呵呵
这样可以在class1中访问(因为同处一个程序集里)
但是在其它的程序集里(比如项目引用后)是不能使用这个构造函数的。
{
private Class2()
{ } class Class1
{
Class2 result()
{
return new Class2();
}
}
}
{
private Class2()
{
Console.WriteLine("Class 2 is created");
} internal class Class1
{
internal Class2 result()
{
return new Class2();
}
}
}
class calss1
{
public class2 ReturnClass2()
{
return class2.NewClass2();
}
}
class class2
{
private class2()
{}
public static class2 NewClass2()
{
return new class2
}
}
Regex re = new Regex(@"", RegexOptions.Singleline);
MatchCollection mc = re.Matches(str);
这样的例子在.Net Framework里还是挺多的。
我只要能实现这样类似的就可以了,所以我把代码放到另外一个程序集里,然后用internal声明Class2的构造函数就可以了。