F
fish_dong
Unregistered / Unconfirmed
GUEST, unregistred user!
昨天在用C#实现注册式单件的时候发现了.net反射机制中一个很怪的地方(Java就不是这样):
有办法可以将缺省构造函数为私有的类实例化,测试例程如下:
using System;
namespace RelTest
{
/// <summary>
/// Test 的摘要说明。
/// </summary>
class privatetest
{
private privatetest(){}
public void SayHello()
{
Console.Write("privatetest say hello./n");
Console.Write("Press enter to exit.../n");
Console.ReadLine();
}
}
class Test
{
public static void Main()
{
privatetest mytest=(privatetest)Activator.CreateInstance(Type.GetType("RelTest.privatetest"),true);
mytest.SayHello();
}
}
}
(Microsoft .NET 框架版本:1.0.3705.288,SP1下运行通过)
以下是摘自MS文档
_______________________
[C#]
public static object CreateInstance(
Type type,
bool nonPublic
);
参数
type
要创建的对象的类型。
nonPublic
如果匹配且无参数的构造函数可以为公共或非公共,则为 true;否
则,只有公共构造函数才可以匹配。
备注
要调用的构造函数必须是可访问的。
------------------------
看备注的说明应该是不行的,但测试代码确实通过了。
这样一来,即便构造函数为私有的类依然能直接能创建,那就会带来不少问题。
比如单件类不再保险,对象Pool也是,等等。
欢迎大家讨论
有办法可以将缺省构造函数为私有的类实例化,测试例程如下:
using System;
namespace RelTest
{
/// <summary>
/// Test 的摘要说明。
/// </summary>
class privatetest
{
private privatetest(){}
public void SayHello()
{
Console.Write("privatetest say hello./n");
Console.Write("Press enter to exit.../n");
Console.ReadLine();
}
}
class Test
{
public static void Main()
{
privatetest mytest=(privatetest)Activator.CreateInstance(Type.GetType("RelTest.privatetest"),true);
mytest.SayHello();
}
}
}
(Microsoft .NET 框架版本:1.0.3705.288,SP1下运行通过)
以下是摘自MS文档
_______________________
[C#]
public static object CreateInstance(
Type type,
bool nonPublic
);
参数
type
要创建的对象的类型。
nonPublic
如果匹配且无参数的构造函数可以为公共或非公共,则为 true;否
则,只有公共构造函数才可以匹配。
备注
要调用的构造函数必须是可访问的。
------------------------
看备注的说明应该是不行的,但测试代码确实通过了。
这样一来,即便构造函数为私有的类依然能直接能创建,那就会带来不少问题。
比如单件类不再保险,对象Pool也是,等等。
欢迎大家讨论