泛型和远程处理 可以定义和部署利用泛型的远程类,并且可以使用编程或管理配置。请考虑使用泛型并且派生自 MarshalByRefObject 的类 MyServer。 public class MyServer : MarshalByRefObject 只有当类型参数 T 是可封送的对象时,您才能通过远程处理访问该类。这意味着 T 是可序列化的类型或者派生自 MarshalByRefObject。您可以通过将 T 约束为派生自 MarshalByRefObject 来实施这一要求。 public class MyServer : 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); 对于客户端类型激活模式和位置注册,具有以下代码: Type serverType = typeof(MyServer); 当实例化远程服务器时,只须提供类型参数,就好像您在使用本地一般类型一样: MyServer obj; 除了使用 new 以外,客户端还可以选择使用 Activator 类的方法来连接到远程对象。在使用 Activator.GetObject() 时,您需要提供要使用的类型实参,并且在显式强制转换返回的 Object 时提供实参类型: string url = ...; //some url initialization |
正在阅读:C# 最强大的功能--泛型简介C# 最强大的功能--泛型简介
2005-06-23 10:16
出处:
责任编辑:moningfeng
键盘也能翻页,试试“← →”键