用Visual C#动态生成组件(转)
以前在用Delphi写程序的时候,总不喜欢在窗体上排放很多组件,这一方面有点不美观,并且在调试程序时候,也不是十分方便。通常在写程序的时候,当要用到某些组件,采用的方法一般都是动态创建,用完以后就释放掉。Visual C#在程序运行的时候也可以动态创建组件,下面就结合一个程序例子来具体介绍如何用Visual C#动态生成组件。首先让我们了解一下,在动态创建组件的过程中要用到的一些概论和理论。 一. Boxing (装箱)和Unboxing (出箱): 在用Visual C#动态创建组件的时候,要涉及到二种数据类型变量的转换,这二种类型变量就是实值
对.NET Framework 事件机制理解的代码分析(转)
下面的文章是我自认为对"事件"机制理解比较透彻的后写的代码分析,但写完之后,鄙人又惟恐理解有所偏差,所以特贴出来让各位高手指教一二,若能让发现理解错误之处,将不胜感激(此问完全乃本人"独立自主"之作,绝非抄袭) 同时我相信此文对c#初学者也有一定帮助! 为了阐述清晰,特举例说明; 该范例是在一个控件中完全自定义一组事件,并在另外的程序集中对事件被激发作出反映(也就是事件被激发后调用预先定义好的方法). 一.含有自定义事件的控件主体代码及对应剖析 (注意,此控件库是由VS.NET的"新建"-&g
在.NET(正式版)环境下读写系统日志(转)
作为商业应用程序,尤其是WEB下的应用程序,安全问题是第一位的。这里所说的安全包括两个方面,一是系统本身的安全,也就是系统本身的强壮性,另一方面是系统在使用时,用户的误操作,或恶意破坏时引起的安全问题。 本文并不想介绍系统全方面的问题,如果你有兴趣的可以去查阅相关资料。这里,我想要介绍的是如何在系统发生错误,或者遭到破坏时,如何把相关信息记录下来。比如,当有人试图非法登录的时候,如何记录下时间,他所在机器的IP等一系列信息,以便管理员采取相关的措施。 有两种方式可供选择,一是将相关信息写入指定的数
详解.NET的RAD功能(转)
Visual Studio.NET 拥有开发者建立一个成功而强大的中间层应用服务所需要的所有开发工具,利用这些工具,开发者可以: 1.保障消息传播和利用微软消息队列(MSMQ)跨平台的通讯; 2.将应用程序的错误信息记录到共享的应用程序事件日志,并且可以设定一个组件去唤醒预先定义的任务; 3.可以知道网络中的任何一台计算机的性能特征; 4.可以编写在文件系统改变时被唤醒和执行的组件; 5.可以直接拖拽功能模块到应用程序当中。 使开发者专注于业务上的问题,而不是繁琐的劳动。 下面,让我们来深入了解RAD开发的几个方面: 服务器浏览
.NET Remoting编程简介之二(转)
Resume需要能够被串行化,以便能作为被远程调用的.NET Remote对象的返回类型,原因是该对象将被转换为通过网络传输的原始数据,然后在网络的另一端再被装配成一个对象。 该对象非常简单,为了使本篇文章看起来更简单,其中的构造器甚至使用缺省的内容初始化其中的一些域。 [Serializable] public class Resume { private decimal resumeID, userID; private String body, title; public Resume(decimal resumeID) { this.ResumeID=resumeID; this.UserID=1; this.Body="This is the default body of the resume&quo
.NET Remoting编程简介之一(转)
.NET Remoting提供了一个功能强大、高效的处理远程对象的方法,从结构上而言,.NET Remote对象非常适合通过网络访问资源,而又无需处理由基于SOAP的WebServices所带来的难题。.NET Remoting使用起来比Java的RMI简单,但要比创建Web Service难度大一些。 在本篇文章中,我们将创建一个从数据库读入内容的远程对象。文中还包括了一个忽略数据库功能的替补对象,以使没有数据库可以使用的读者仍然能够使用.NET Remoting。 第一步:创建共享库 依次点击“文件”->“新创建”->“工程”,选择创建一个C# Library,并将其命名为
Microsoft .NET完全介绍(下)(转)
.NET如何改变计算 Microsoft .NET将从根本上改变我们的思考和使用电脑的方式。目前"服务器"和"桌面电脑"这两种概念占据了计算领域的统治地位。然而Microsoft .NET是一种分布式计算范例,它没有了传统上的服务器和桌面电脑的区别,取而代之的是,计算的处理被放在最合适的地方进行,可能是服务 器,或是PC,也有可能是手提电脑以及其他智能设备。这就是智能计算。 .NET的计算模型对商务和终端用户都产生了重要影响,但方法不同。对终端用户来说,这个新计算模式更具个性化、综合程度更高,会给他们带来
Microsoft .NET完全介绍(中)(转)
.NET平台 Microsoft的平台是由用于创建和运行XML Web服务组成的。它包含了下面四个组件: .NET框架和Visual Studio.NET:这些是开发人员用来生成XML Web服务的工具。.NET框架是Microsoft .NET平台核心中的一套编程接口;Visual Studio.NET是一套多语言系列的 编程工具。 服务器基本结构(Server Infrastructure): .NET的服务器基本结构是一系列用于生成、发布和操作XML Web服务的基础程序,包括Windows和各种.NET企业服务器。主要的技术包括对XML、scale-out及跨程序和服务的商务流程(business process orchestratio
Microsoft .NET完全介绍(上)(转)
本文给出了一个对Microsoft .NET和Microsoft's XML Web服务平台的总体介绍以及使用它们的好处。同时我们还将举例说明.NET是如何改变终端用户和商业的计算模式。 在本文中我们不想涉及到很精深的技术,任何稍微懂一点电脑和Internet知识的人都可以理解本篇的内容。Micorosoft还为那些希望掌握.NET的公司执行官、IT领导和程序员们 提供了更多的资源。 什么是Microsoft .NET? Microsoft .NET是Microsoft的XML Web服务平台。.NET包含了建立和运行基于XML的软件所需要的全部部件。 Microsoft .NET解决了下面这些
微软.NET 常见问题解答(转)
微软.NET 就是 XML Web 服务平台,它通过提供Web服务,使得人们使用应用软件和设备的方式发生了重大变化.通过阅读本文关于 微软.NET常见问题解答就会明白.NET是如何改变人们的计算体验的。 .NET对用户意味着什么 什么是微软.NET? 什么是.NET体验? 什么是.NET体验实例? .NET提供了什么解决方案? .NET对开发人员和IT企业意味着什么? .NET是如何易于管理的? .NET可升级吗? .NET是如何进行安全和个人隐私保护的? 开发人员为什么要选择.NET而不是其它XML平台? .NET编程模型和工具的好处是什么? .NET是如何工作
.NET体系中的源程序安全问题(4)(转)
四、结束语 如果你是一个桌面应用的供应商,你清楚自己应该怎么做。你可以用非受管理的C++编写代码,然后从受管理的VB调用它。用这种方法设计应用,你能够确信代码的安全。然而,如果你是一个第三方供应商,而且准备在组件中用非受管理的代码替代受管理的代码,那么,你是在强迫用户放弃.NET的优势,重新让他们面对他们今天所面临的问题。受管理代码能够防止对应用本身或者其他应用所使用的内存空间进行破坏性操作,对受管理代码的支持正是.NET吸引人的原因之一。某些用户可能会查看受管理代码的IL程序,甚至还有可能分析应用的算法实
.NET体系中的源程序安全问题(3)(转)
三、反向工程 当程序集以MSIL而不是机器代码的形式发布时,最令人关心的问题应该就是安全。正如前面所介绍的,程序集包含了关于包里面所有模块的manifest以及详细描述各个模块的元数据。.NET SDK 提供了一个名为ILDASM的工具,它是一个IL反汇编程序,能够从模块反汇编出IL代码以及应用程序中各个模块的元数据说明。从Listing 1可以看出,利用ILDASM对代码实施反向工程是极为方便的。 【Listing 1】下面是IL反汇编程序ILDASM输出的部分结果。 它显示的是应用中一个名为LeavingMessage的私有方法,后 面部分是调用LeavingMessage
.NET体系中的源程序安全问题(2)(转)
二、中间语言 为了了解在用VB.NET构造工程的过程中发生了什么事情,我们需要创建一个生成代码和程序集时使用的示例工程:打开VS.NET,新建一个Visual Basic工程,在窗体中加入一个文本标签(Label),然后把文本标签的Text属性改成“Good Bye Visual Basic 6.0”(如图1),把这个应用命名为GoodByeVB6。 图1 在深入.NET体系之前,我们需要了解一些有关.NET的边缘知识和术语。首先,IL(中间语言)并不是什么新概念,VB、C++编译器生成和利用IL已经有数年的历史,只不过很少有人公开谈论它或为它编写文档。与过去编译应用
.NET体系中的源程序安全问题(1)(转)
在.NET平台上,代码以中间语言的形式运行,它是.NET众多优势的基础。但在独立桌面应用中,它给源代码的安全带来了威胁。本文探讨产生这个问题的原因,分析可能的解决办法。 在Visual Studio.NET(VS.NET)体系中,VB、Visual C++以及C#之类的编译器把源程序编译成MSIL。MSIL即Microsoft Intermediate Language,或Microsoft中间语言,它在执行之前被即时(Just-In-Time Compile,JIT)编译成为机器语言。但是,你可能还没有深入了解当你在VS中点击Build按钮时发生了什么事情,或者你私有的源代码和信息是否在偷窥的眼光面前安然无恙、
.NET 开发(转)
常年累月,我们使用计算机的方式在变。今天,每个人都看到因特网的价值,并且,我们使用计算机的方式在变得越来越依靠网络提供的服务。就我而论,我喜欢通过因特网买东西,获取交通信息,比较产品,买票,读产品评论。 不过,我发现在今天,因特网上还有许多我想做的事情不能实现。例如,我想在我的社区找到一个对菜肴风味有详细介绍的餐馆。此外,我想知道这个餐馆今晚7点是否还有空位。 或者,如果我在做生意,我会希望知道卖方商品的详细资料。如果有多个的卖方能向我提供资料,我想知道哪个卖方的货最便宜,或者是哪个卖方能最
Microsoft .NET Remoting:技术概述之二(转)
HTTP 通道HTTP 通道使用 SOAP 协议与远程对象传输消息。所有的消息流过 SOAP 格式化程序时都被转换为 XML 格式且被序列化,所需的 SOAP 头也会被添加到该流中。您也可以指定能够生成二进制数据流的二进制格式化程序。然后,数据流会使用 HTTP 协议传输到目标 URI。TCP 通道TCP 通道使用二进制格式化程序将所有的消息序列化为二进制流,并使用 TCP 协议将其传输到目标 URI。激活远程处理框架支持远程对象的服务器激活和客户端激活。不需要远程对象在方法调用之间维护任何状态时,一般使用服务器激活。服务器激活也适用于多个客户端调用方法
Microsoft .NET Remoting:技术概述之一(转)
简介Microsoft® .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架。这种框架提供了多种服务,包括激活和生存期支持,以及负责与远程应用程序进行消息传输的通讯通道。格式化程序用于在消息通过通道传输之前,对其进行编码和解码。应用程序可以在注重性能的场合使用二进制编码,在需要与其他远程处理框架进行交互的场合使用 XML 编码。在从一个应用程序域向另一个应用程序域传输消息时,所有的 XML 编码都使用 SOAP 协议。出于安全性方面的考虑,远程处理提供了大量挂钩,使得在消息流通过通道进行传输之前,安
微软的远程处理框架.NET Remoting(1)(转)
微软的.NET Remoting提供了一种允许对象通过应用程序域与另一对象进行交互的框架。本文将通过两个具体的代码例子介绍它的特性,通过.NET Remoting,两个应用间的通信将变得非常简单,使用上也相当灵活。 最近几年来,在计算机世界中,关于“向外扩展”(scale-out)与“向上扩展”(scale-up)的讨论不断,并且有向scale-out转化的趋势。在以前,当计算机跟不上应用对性能的要求时,人们将会购买一台更好更昂贵的机器,这就是scale-up,而scale-out则是通过在网络中加入更多的机器来解决这个问题,这样就无需更换整个系统。通
微软的远程处理框架.NET Remoting(2)(转)
以下我们将举一个使用channel的例子。在这个例子中,我们将可以看到使用HTTP channel把两个应用 连接在一起是如此的简单。以下的服务器应用提供了一个服务,可将一个字符串的字母顺序反转。 Server.cs using System; using System.IO; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels.HTTP; namespace RemotingSample { public class Reverser : MarshalByRefObject { public string Reverse(string text) { Console.WriteLin
.NET中的特殊类型成员之二(转)
这个构造器首先初始化x=5,然后,初始化x=10。换句话说,编译器产生的结果类型构造器首先包含静态字段的初始化代码,随后是类型构造器的代码。 属性 许多类型定义的属性可以被重新获得或修改。这些属性常常都是用类型字段成员来实现的。例如,下面是包含有两个字段的类型定义: class Employee { public String Name; public Int32 Age; } 如果创建这个类型的实例,那么很容易用以下代码得到或设置属性: Employee e = new Employee(); e.Name = "Jeffrey Richter"; // 设置名字属性 e.Age = 36; // 设置年龄