正在阅读:C# 最强大的功能--泛型简介C# 最强大的功能--泛型简介

2005-06-23 10:16 出处: 作者:Juval Lowy 责任编辑:moningfeng

泛型和远程处理

可以定义和部署利用泛型的远程类,并且可以使用编程或管理配置。请考虑使用泛型并且派生自 MarshalByRefObject 的类 MyServer。

public class MyServer : MarshalByRefObject
{...}



只有当类型参数 T 是可封送的对象时,您才能通过远程处理访问该类。这意味着 T 是可序列化的类型或者派生自 MarshalByRefObject。您可以通过将 T 约束为派生自 MarshalByRefObject 来实施这一要求。

public class MyServer : MarshalByRefObject
where T : MarshalByRefObject
{...}



在使用管理类型注册时,您需要指定要取代一般类型参数而使用的确切类型实参。您必须以与语言无关的方式命名这些类型,并且提供完全限定命名空间。例如,假设类 MyServer 在命名空间 RemoteServer 中的程序集 ServerAssembly 中定义,并且您希望在客户端激活模式下将其与整型而不是一般类型参数 T 一起使用。在该情况下,配置文件中必需的客户端类型注册条目应该是:

<client url="...some url goes here...">

<activated type="RemoteServer.MyServer<b>[[System.Int32]]</b>,ServerAssembly"/>

</client>

配置文件中的匹配主机端类型注册条目是:

<service>

<activated type="RemoteServer.MyServer<b>[[System.Int32]]</b>,ServerAssembly"/>


</service>

双方括号用来指定多个类型。例如:

LinkedList[[System.Int32],[System.String]]



在使用编程配置时,您可以用类似于 C# 1.1 的方式配置激活模式和类型注册,不同之处在于,当定义远程对象的类型时,您必须提供类型实参而不是一般类型参数。例如,对于主机端激活模式和类型注册,您可以编写如下代码:

Type serverType = typeof(MyServer);
RemotingConfiguration.RegisterActivatedServiceType(serverType);



对于客户端类型激活模式和位置注册,具有以下代码:

Type serverType = typeof(MyServer);
string url = ...; //some url initialization
RemotingConfiguration.RegisterWellKnownClientType(serverType,url);



当实例化远程服务器时,只须提供类型参数,就好像您在使用本地一般类型一样:

MyServer obj;
obj = new MyServer();
//Use obj



除了使用 new 以外,客户端还可以选择使用 Activator 类的方法来连接到远程对象。在使用 Activator.GetObject() 时,您需要提供要使用的类型实参,并且在显式强制转换返回的 Object 时提供实参类型:

string url = ...; //some url initialization
Type serverType = typeof(MyServer);
MyServer obj;
obj = (MyServer)Activator.GetObject(serverType,url);
//Use obj


键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品