读书人

求教一个 函数返回值 的有关问题

发布时间: 2012-01-31 21:28:41 作者: rapoo

求教一个 函数返回值 的问题。
假设有如下代码

C# code
namespace test{    class Class1    {        public Class2 Result()        {            //return new Class2();            //这里不能这样返回值。        }    }    class Class2    {        private Class2()        {            //some code        }    }}

我要Class2不能有可使用的构造函数,但又要在Class1类里面返回一个Class2类型的值,这时这个返回语句怎么写?
或者有其他的什么解决方法没?

[解决办法]
class Class2
{
private Class2()
{
}
public static Class2 getClass2()
{
Class2 cc = new Class2();
return cc;
}
}
这个是最基本的设计模式
[解决办法]
静态方法返回
[解决办法]
多想了一会事就慢了。。
[解决办法]
使用单例模式
[解决办法]
1楼正解。
既然无可用构造,类本身有默认构造 可以实例化,且必须为静态。
[解决办法]
把构造函数私有化,呵呵
[解决办法]
楼主这样做的目的是什么?
[解决办法]
1楼的不就是吗?
[解决办法]
探讨
我这样做有我自己的目的。

[解决办法]
我要Class2不能有可使用的构造函数,但又要在Class1类里面返回一个Class2类型的值

If Class1 can create Class2, what prevents Class7 or Class8 or Class9 from creating Class2?

[解决办法]
MatchCollection本身不能创建一个新的实例,但是可以用re.Matches创建一个新的实例。
=======================================================================
那是因为re.Matches(str)返回一个MatchCollection,MatchCollection mc = re.Matches(str);//把一个句柄交给引用变量mc。
[解决办法]
要么 用internal修饰符,详细请查阅MSDN;
要么 变态一点吧:
C# code
    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;        }    }
[解决办法]
只要返回的类型对就行了!!!
[解决办法]
探讨
1楼的是可以运行。但不是我想要的意思。大家也都没有弄懂我的意思。
我是说Class2是不能被自己创建一个新的实例的。只有在Class1里用Result()才能返回一个新的实例。

就像这个例子

C# code
Class2 c2;
//c2=new Class2;
//这里是不允许的。
Class1 c1 = new Class1();
c2 = c1.Result();



也许这个是挺麻烦的。

[解决办法]
internal
[解决办法]
class2的构造函数可以写成internal。
这样可以在class1中访问(因为同处一个程序集里)
但是在其它的程序集里(比如项目引用后)是不能使用这个构造函数的。
[解决办法]
C# code
class Class2    {        private Class2()        { }        class Class1        {            Class2 result()            {                return new Class2();            }        }    } 


[解决办法]
按你的要求只能使用nest class 了,但是这样一来你访问Class1 就比较麻烦了

C# code
    class Class2    {        private Class2()        {            Console.WriteLine("Class 2 is created");        }       internal class Class1        {            internal Class2 result()            {                return new Class2();            }        }    }
[解决办法]
C# code
class calss1{   public class2 ReturnClass2()   {       return class2.NewClass2();    }}class class2{    private class2()   {}    public static class2 NewClass2()    {       return new class2    }}
[解决办法]
楼上不是他要的!

读书人网 >C#

热点推荐