读书人

[教]怎么在行取一型的例

发布时间: 2011-12-29 22:09:38 作者: rapoo

[教]如何在行取一型的例(反射模式)
在不使用件模式和的情下在行取一已建的例象?

比如有一Startup型
在有

Startup startup = new Startup();

如果在其他的型中取到已例化的startup象?

[解决办法]
如果在其他的型中取到已例化的startup象?
--------------------------------------
获取实例就是需要获取实例的引用
在你代码的上下文中必须能获得该实例的引用,比如该实例在上下文中创建(类似单件),或全局变量(静态类),更复杂的aop似的代码拦截获取上下文
[解决办法]
这关反射什么事?

要拿到这个对象要确保两点:
1、能拿到它的引用
2、它没被销毁

实际上只要满足了条件1,这个对象的引用还可以被活动代码访问到,那么它就不会被销毁。

所以你只要把这个对象放到一个你想要拿的地方就可以了。
我相信你的脑子一定能想出一个比单件和静态类更好的地方的,楼主……
[解决办法]
using System;

namespace TEST
{
/// <summary>
/// Class 的摘要说明。
/// </summary>
public class 其他的型
{
public Startup _startup;

public 其他的型()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

public void 获取已例化的象(Startup objStartup)
{
_startup=objStartup;//创建一个函数成员来传递已存在的实体
}
}
}
[解决办法]
传递对象的引用..
[解决办法]
这个没有别的办法,因为你不引用一个对象之后,这个对象就有可能被垃圾回收点,

在设计模式中有个叫 注册模式的

其实就是把你这个对象放到一个dict或者hashtable里面,然后通过名字找。

比如
dict dic;
regist(obj){
dict.add(obj.GetType().toString(),obj)
}
getobj(str){
return dic.get(str);
}
然后就可以通过str来获得你要的对象了
[解决办法]
要单件实例就不要这样弄: Startup startup = new Startup();

参考下面写 Startup 类:

public class Startup
{
private static Startup _Startup;
private Startup(){}

public static Startup GetStartup()
{
if (_Startup==null) _Startup=new Startup();
return _Startup;
}
}

以后每个要用的地方只要 Startup.GetStartup(); //就始终都是一个实例

读书人网 >C#

热点推荐