Thursday, April 30, 2009

Let Yourself Go!(尽情生活)

Several years ago I received a post card from a friend in Jackson Hole, Wyo., who wrote, " I am skiing with abandon!" I wondered what he meant, for when I ski it is always with trepidation. I believe he meant he was skiing skillfully, joyfully, peacefully and confidently. Although I have no hopes of ever skiing that way, I do dream of living with abandon. I believe that men and women through the ages who have led successful lives have captured these five secrets of living life to the fullest.

1.Have a self you respect. This means having a deep sense of responsibility for your thoughts and actions. It means keeping your word, and being faithful to self, family and work. It means believing in what you do and working hard. It means setting your own internal standards, and not comparing yourself to others. It's not a question of being better than someone else; respect and integrity demand that you be better than you thought you could be.

Winston Churchill exemplified integrity an respect in the face of opposition. During his last year in office, he attended an official ceremony. Several rows behind him two gentlemen began whispering. "That's Winston Churchill." "They say he is getting senile." "They say he should step aside and leave the running of the nation to more dynamic and capable men." When the ceremony was over, Churchill turned to the men and said, "Gentlemen, they also say he is deaf!"

Churchill knew that one secret to a self you can respect is to choose a course of action based on what is right, not expedient, and not waver from it when criticized.

2.Commit yourself to others. Believe in others, and take time to nurture their dreams. A wise man said, "If you want one year's prosperity, grow grain. But if you want ten years' prosperity, grow men and women."

You can build into the lives of your family, friends and colleagues by providing nutrients of gratitude and encouragement, and by investing your time and energy in their aspirations. If a tree is given minimal nourishment, it will live, but it will not grow. But if nourishment is given over and beyond what is needed for life, the tree will live and grow upward, producing fruit.

3.Turn disappointments into strengths. Individuals who live with abandon have discovered that personal trials make them more sensitive and loving, while building endurance and character. They have learned that achievements worth remembering are stained with the blood of diligence and etched with the scars of disappointment.

The pages of history are filled with the heroic stories of undaunted men and women who triumphed over disabilities and adversities to demonstrate victorious spirits. Raise him in abject poverty, and you have an Abraham Lincoln. Make her blind and deaf, and you have a Helen Keller.

4.Enjoy life's process, not just life's rewards. We live in a goal-oriented society that wants problems resolved now. We want three-minute oatmeal, one-hour dry cleaning, and instant success. But to live with abandon, we must live one day at a time, savoring the little victories, realizing that life is an endless journey in self-discovery and personal fullfillment. It means taking time to hug your kids, kiss your spouse and let the other fellow ahead of you on the freeway.

5.Become involved in something bigger than yourself. I do not believe you will live happily if you set out to live life for yourself alone. Choose a cause bigger than you are and work at it in a spirit of excellence. It will become a part of you as you see your goals through to the end. Measure success not by what you've done, but what you could do.


Tuesday, April 28, 2009

Sucks

I found this blogger sucks. I want to delete a blog published, but can't fine this option. And I want to assort my articles, in order to find the easier, but have this option neither.
God, I hope Google can make it better....

Tuesday, April 21, 2009

加密和解密

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EncryptionSample
{
class Program
{
static void Main(string[] args)
{
string asd = PassWord.JiaMi("kevin");
string asd2 = PassWord.JieMi(asd);

Console.WriteLine("加密之后: "+asd);
Console.WriteLine("***************");
Console.WriteLine("解密之后: "+asd2);
}
}

public class PassWord
{
private PassWord()
{ }
///
/// 解密程序
///

/// 加密的密码
/// 解密后的密码
public static string JieMi(string dd)
{
string vkey = "zhangzengbao";
int vkeylen = vkey.Length;
int vKeyPos = 0;
int vSrcPos = 0;
int vSrcAsc = 0;
int vTmpSrcAsc = 0;
string vDest = "";
string ff = dd.Substring(0, 2);
int ddddd = Convert.ToInt32(ff, 16);
string fff = Convert.ToString(ddddd, 10);
int vOffset = Convert.ToInt32(fff);

vSrcPos = 2;
while (vSrcPos < dd.Length)
{

int eee = Convert.ToInt32(dd.Substring(vSrcPos, 2), 16);

vSrcAsc = Convert.ToInt32(Convert.ToString(eee, 10));
if (vKeyPos < vkeylen)
{
vKeyPos = vKeyPos + 1;
}
else
{
vKeyPos = 1;
}
char ddddff = (vkey[vKeyPos - 1]);
//vKeyPos = vKeyPos - 1;
vTmpSrcAsc = vSrcAsc ^ (int)(vkey[vKeyPos - 1]);
if (vTmpSrcAsc <= vOffset)
{
vTmpSrcAsc = 255 + vTmpSrcAsc - vOffset;
}
else
{
vTmpSrcAsc = vTmpSrcAsc - vOffset;
}

vDest = vDest + (char)(vTmpSrcAsc);
vOffset = vSrcAsc;
vSrcPos = vSrcPos + 2;
}
return vDest;
}
///
/// 加密程序
///

/// 要加密的字符串
/// 加密后的字符串
public static string JiaMi(string dd)
{

string vkey = "zhangzengbao";
int vkeylen = vkey.Length;
int vKeyPos = 0;
int vSrcAsc = 0;
int vRange = 256;
int voffset = 0;
string vDest = "";
Random ro = new Random();
voffset = ro.Next(vRange);
//voffset = ro.Next(17, 256);

vDest = Convert.ToString(voffset, 16);
if (vDest.Length < 2)
{
vDest = "0" + vDest;
}
for (int i = 0; i < dd.Length; i++)
{
//byte[] B = Encoding.ASCII.GetBytes(a);
// byte[] b = Encoding.ASCII.GetBytes(dd[i].ToString());
// int bb =(int) b[0];
vSrcAsc = ((int)dd[i] + voffset) % 255;//求模
// vSrcAsc = (bb + voffset) % 255;
if (vKeyPos {
vKeyPos = vKeyPos + 1;
}
else
{
vKeyPos = 1;
}

vRange = (int)(vkey[vKeyPos-1]);
//byte[] c = Encoding.ASCII.GetBytes(vkey[vKeyPos - 1].ToString());
// int cc = (int)c[0];
//vRange = cc;
vSrcAsc=vSrcAsc ^ vRange;
string v1=Convert.ToString(vSrcAsc, 16);
if (v1.Length < 2)
{
v1 = "0" + v1;
}
vDest = vDest +v1;

voffset=vSrcAsc;

}
vDest = vDest.ToUpper();
return vDest;

}
}
}

如何在 Web 服务器上设置 SSL

目标
本章的目标是:

获取 SSL 证书。

在 IIS 服务器上安装 SSL 证书。

配置虚拟目录以要求 SSL。
返回页首
适用范围
本章适用于以下产品和技术:

Microsoft Windows® XP 或 Windows 2000 Server (Service Pack 3) 以及更高版本的操作系统

Microsoft Internet 信息服务 5.0

Microsoft 证书服务(如果您需要生成自己的证书)
返回页首
如何使用本章内容
若要学好本章内容:

您必须有配置 IIS 的经验。

如果您想生成自己的证书,则必须能够访问某个证书颁发机构 (CA),如 Microsoft 证书服务。

如果您不希望生成自己的证书,则必须决定将向哪个商业证书颁发机构申请 SSL 证书。大多数证书颁发机构 (CA) 会就此服务收费。

阅读第 4 章安全通信。其中介绍了 SSL 及其最常见的用途。
返回页首
摘要
安全套接字层 (SSL) 是一套提供身份验证、保密性和数据完整性的加密技术。SSL 最常用来在 Web 浏览器和 Web 服务器之间建立安全通信通道。它也可以在客户端应用程序和 Web 服务之间使用。
为支持 SSL 通信,必须为 Web 服务器配置 SSL 证书。本章介绍如何获取 SSL 证书,以及如何配置 Microsoft® Internet 信息服务 (IIS),以便支持 Web 浏览器和其他客户端应用程序之间使用 SSL 安全地进行通信。
返回页首
生成证书申请
此过程创建一个新的证书申请,此申请可发送到证书颁发机构 (CA) 进行处理。如果成功,CA 将给您发回一个包含有效证书的文件。

生成证书申请
1.
启动 IIS Microsoft 管理控制台 (MMC) 管理单元。
2.
展开 Web 服务器名,选择要安装证书的 Web 站点。
3.
右键单击该 Web 站点,然后单击“属性”。
4.
单击“目录安全性”选项卡。
5.
单击“安全通信”中的“服务器证书”按钮,启动 Web 服务器证书向导。
注意:如果“服务器证书”不可用,可能是因为您选择了虚拟目录、目录或文件。返回第 2 步,选择 Web 站点。
6.
单击“下一步”跳过欢迎对话框。
7.
单击“创建一个新证书”,然后单击“下一步”。
8.
该对话框有以下两个选项:

“现在准备申请,但稍后发送”
该选项总是可用的。

“立即将申请发送到在线证书颁发机构”
仅当 Web 服务器可以在配置为颁发 Web 服务器证书的 Windows 2000 域中访问一个或多个 Microsoft 证书服务器时,该选项才可用。在后面的申请过程中,您有机会从列表中选择将申请发送到的颁发机构。
单击“现在准备申请,但稍后发送”,然后单击“下一步”。
9.
在“名称”字段中键入证书的描述性名称,在“位长”字段中键入密钥的位长,然后单击“下一步”。
向导使用当前 Web 站点名称作为默认名称。它不在证书中使用,但作为友好名称以助于管理员识别。
10.
在“组织”字段中键入组织名称(例如 Contoso),在“组织单位”字段中键入组织单位(例如“销售部”),然后单击“下一步”。
注意:这些信息将放在证书申请中,因此应确保它的正确性。CA 将验证这些信息并将其放在证书中。浏览您的 Web 站点的用户需要查看这些信息,以便决定他们是否接受证书。
11.
在“公用名”字段中,键入您的站点的公用名,然后单击“下一步”。
重要说明:公用名是证书最后的最重要信息之一。它是 Web 站点的 DNS 名称(即用户在浏览您的站点时键入的名称)。如果证书名称与站点名称不匹配,当用户浏览到您的站点时,将报告证书问题。
如果您的站点在 Web 上并且被命名为 www.contoso.com,这就是您应当指定的公用名。
如果您的站点是内部站点,并且用户是通过计算机名称浏览的,请输入计算机的 NetBIOS 或 DNS 名称。
12.
在“国家/地区”、“州/省”和“城市/县市”等字段中输入正确的信息,然后单击“下一步”。
13.
输入证书申请的文件名。
该文件包含类似下面这样的信息。
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIDZjCCAs8CAQAwgYoxNjA0BgNVBAMTLW1penJvY2tsYXB0b3Aubm9ydGhhbWVy...
-----END NEW CERTIFICATE REQUEST-----
这是您的证书申请的 Base 64 编码表示形式。申请中包含输入到向导中的信息,还包括您的公钥和用您的私钥签名的信息。
将此申请文件发送到 CA。然后 CA 会使用证书申请中的公钥信息验证用您的私钥签名的信息。CA 也验证申请中提供的信息。
当您将申请提交到 CA 后,CA 将在一个文件中发回证书。然后您应当重新启动 Web 服务器证书向导。
14.
单击“下一步”。该向导显示证书申请中包含的信息概要。
15.
单击“下一步”,然后单击“完成”完成申请过程。
证书申请现在可以发送到 CA 进行验证和处理。当您从 CA 收到证书响应以后,可以再次使用 IIS 证书向导,在 Web 服务器上继续安装证书。
返回页首
提交证书申请
此过程使用 Microsoft 证书服务提交在前面的过程中生成的证书申请。

提交证书申请
1.
使用“记事本”打开在前面的过程中生成的证书文件,将它的整个内容复制到剪贴板。
2.
启动 Internet Explorer,导航到 http://hostname/CertSrv,其中 hostname 是运行 Microsoft 证书服务的计算机的名称。
3.
单击“申请一个证书”,然后单击“下一步”。
4.
在“选择申请类型”页中,单击“高级申请”,然后单击“下一步”。
5.
在“高级证书申请”页中,单击“使用 Base64 编码的 PKCS#10 文件提交证书申请”,然后单击“下一步”。
6.
在“提交一个保存的申请”页中,单击“Base64 编码的证书申请(PKCS #10 或 #7)”文本框,按住 CTRL+V,粘贴先前复制到剪贴板上的证书申请。
7.
在“证书模板”组合框中,单击“Web 服务器”。
8.
单击“提交”。
9.
关闭 Internet Explorer。
返回页首
颁发证书

颁发证书
1.
从“管理工具”程序组中启动“证书颁发机构”工具。
2.
展开您的证书颁发机构,然后选择“挂起的申请”文件夹。
3.
选择刚才提交的证书申请。
4.
在“操作”菜单中,指向“所有任务”,然后单击“颁发”。
5.
确认该证书显示在“颁发的证书”文件夹中,然后双击查看它。
6.
在“详细信息”选项卡中,单击“复制到文件”,将证书保存为 Base-64 编码的 X.509 证书。
7.
关闭证书的属性窗口。
8.
关闭“证书颁发机构”工具。
返回页首
在 Web 服务器上安装证书
此过程在 Web 服务器上安装在前面的过程中颁发的证书。

在 Web 服务器上安装证书
1.
如果 Internet 信息服务尚未运行,则启动它。
2.
展开您的服务器名称,选择要安装证书的 Web 站点。
3.
右键单击该 Web 站点,然后单击“属性”。
4.
单击“目录安全性”选项卡。
5.
单击“服务器证书”启动 Web 服务器证书向导。
6.
单击“处理挂起的申请并安装证书”,然后单击“下一步”。
7.
输入包含 CA 响应的文件的路径和文件名,然后单击“下一步”。
8.
检查证书概述,单击“下一步”,然后单击“完成”。
现在,已在 Web 服务器上安装了证书。
返回页首
将资源配置为要求 SSL 访问
此过程使用 Internet 服务管理器,将虚拟目录配置为要求 SSL 访问。您可以为特定的文件、目录或虚拟目录要求使用 SSL。客户端必须使用 HTTPS 协议访问所有这类资源。

将资源配置为要求 SSL 访问
1.
如果 Internet 信息服务尚未运行,则启动它。
2.
展开您的服务器名称和 Web 站点。(这必须是已安装证书的 Web 站点)
3.
右键单击某个虚拟目录,然后单击“属性”。
4.
单击“目录安全性”选项卡。
5.
单击“安全通信”下的“编辑”。
6.
单击“要求安全通道 (SSL)”。
现在客户端必须使用 HTTPS 浏览到此虚拟目录。
7.
单击“确定”,然后再次单击“确定”关闭“属性”对话框。
8.
关闭 Internet 信息服务。

ref:
http://www.microsoft.com/china/technet/security/guidance/secmod30.mspx

如何设置客户端证书

目标
本章的目标是:

获取并安装客户端证书。

创建一个需要客户端证书的 ASP.NET Web 应用程序。
返回页首
适用范围
本章适用于以下产品和技术:

Microsoft® Windows® XP 或 Windows 2000 Server (Service Pack 3) 以及更高版本的操作系统

Microsoft Internet 信息服务 (IIS) 5.0

Microsoft 证书服务(如果您需要生成自己的证书)

Microsoft .NET Framework 版本 1.0 (Service Pack 2) 以及更高版本

Microsoft Visual C#® .NET
返回页首
如何使用本章内容
若要学好本章内容:

您必须具有使用 Visual C# .NET 和 Microsoft Visual Studio® .NET 的经验。

您必须具有使用 ASP.NET 开发 Web 应用程序的经验。

您必须有配置 IIS 的经验。

如果您想生成新的客户端证书,则必须能够访问某个证书颁发机构 (CA),如 Microsoft 证书服务。

如果您不希望生成自己的证书,则必须决定将从哪个商业证书颁发机构申请客户端证书。某些证书颁发机构 (CA) 会就此服务收费。

您必须具有一台安装了 SSL 证书的 Web 服务器。有关详细信息,请参见如何在 Web 服务器上设置 SSL。

要了解客户端证书与其他身份验证形式之间的相同与差异之处,请参见第 2 章 ASP.NET 应用程序的安全模型。
返回页首
摘要
客户端证书为 Web 应用程序提供了一种非常好的身份验证机制。浏览器或其他客户端应用程序必须先提供有效的身份验证,然后才能获得应用程序访问权限,这使得客户端不必提供用户名和密码。因此,在创建供其他客户端应用程序访问的安全 Web 服务时,客户端的证书就显得特别有用。
本章详细介绍如何获取和安装客户端证书,并演示了如何创建需要客户端证书的 Web 应用程序。
返回页首
创建一个简单的 Web 应用程序
在此过程中,您将创建一个供测试用的简单 Web 应用程序。

创建一个简单的 Web 应用程序
1.
启动 Visual Studio .NET 并创建一个新的名为 SecureApp 的 Visual C# ASP.NET Web 应用程序。
2.
从工具箱中将一个标签控件拖放到 WebForm1.aspx Web 窗体上,然后将其 ID 属性设置为 message。
3.
再拖放一个标签至 WebForm1.aspx 窗体上,然后将其 ID 属性设置为 certData。
4.
将下面的代码添加到 Page_Load 事件过程中。
string username;
username = User.Identity.Name;
message.Text = "Welcome " + username;
HttpClientCertificate cert = Request.ClientCertificate;
if (cert.IsPresent)
{
certData.Text = "检索到客户端证书";
}
else
{
certData.Text = "无客户端证书";
}
5.
在“生成”菜单上,单击“生成解决方案”。
6.
启动 Internet Explorer 并导航至 http://localhost/SecureApp/WebForm1.aspx。
页面应该显示“欢迎”消息(不显示用户名,因为用户尚未经过身份验证)和“没有客户端证书”。
7.
关闭 Internet Explorer。
返回页首
将 Web 应用程序配置为需要客户端证书
此过程使用 Internet 信息服务 (IIS) 将 Web 应用程序的虚拟目录配置为需要证书。
本过程假设您在 Web 服务器上安装了有效的证书。有关安装 Web 服务器证书的详细信息,请参见如何在 Web 服务器上设置 SSL。

将 Web 应用程序的虚拟目录配置为需要证书
1.
在 Web 服务主机上启动 IIS。
2.
导航到 SecureApp 虚拟目录。
3.
右键单击 SecureApp,然后单击“属性”。
4.
单击“目录安全性”选项卡。
5.
单击“安全通信”下的“编辑”。
如果无法使用“编辑”,则可能没有安装 Web 服务器证书。
6.
选择“要求安全通道 (SSL)”复选框。
7.
选择“需要客户端证书”选项。
8.
单击“确定”,然后再单击“确定”。
9.
在“继承覆盖”对话框中,单击“全选”,然后单击“确定”关闭“SecureApp 属性”对话框。
这会将新的安全设置应用于虚拟根目录下的所有子目录。
10.
要确认 Web 站点已正确配置,启动 Internet Explorer 并(使用 HTTPS)浏览到 https://localhost/secureapp/webform1.aspx。
11.
Internet Explorer 显示“客户身份验证”对话框,要求您选择一个客户端证书。因为您尚未安装客户端证书,所以单击“确定”,确认显示通知您页面需要客户端证书的错误页面。
12.
关闭 Internet Explorer。
返回页首
申请并安装客户端证书
此过程安装客户端证书。您可以使用由任何证书颁发机构颁发的证书,也可按照后面几节所述使用 Microsoft 证书服务来生成自己的证书。
此过程假设 Microsoft 证书服务是为挂起的申请配置的,这要求管理员专门颁发证书。它也可以配置为应证书申请自动颁发证书。

检查证书申请状态设置
1.
在 Microsoft 证书服务计算机上,从“管理工具”程序组中选择“证书颁发机构”。
2.
展开“证书颁发机构(本地)”,右键单击证书颁发机构并单击“属性”。
3.
单击“策略模块”选项卡,然后单击“配置”。
4.
检查默认操作。
以下过程假设选中了“将证书申请状态设成待定。管理员必须专门颁发证书”。

申请客户端证书
1.
启动 Internet Explorer 并导航至 http://hostname/certsrv,其中 hostname 是安装 Microsoft 证书服务的计算机的名称。
2.
单击“申请一个证书”,然后单击“下一步”。
3.
在“选择申请类型”页上,单击“用户证书”,然后单击“下一步”。
4.
单击“提交”完成申请。
5.
关闭 Internet Explorer。

颁发客户端证书
1.
从“管理工具”程序组中启动“证书颁发机构”工具。
2.
展开您的证书颁发机构,然后选择“挂起的申请”文件夹。
3.
选择刚提交的证书申请,指向“操作”菜单上的“所有任务”,然后单击“颁发”。
4.
确认该证书显示在“颁发的证书”文件夹中,然后双击查看它。
5.
在“详细信息”选项卡上,单击“复制到文件”将证书保存为 Base-64 编码的 X.509 证书。
6.
关闭证书的属性窗口。
7.
关闭证书颁发机构工具。

安装客户端证书
1.
要查看证书,启动 Windows 资源管理器,导航至在前一过程中保存的 .cer 文件,然后双击它。
2.
单击“安装证书”,然后在“证书导入向导”的首页单击“下一步”。
3.
选择“根据证书类型,自动选择证书存储区”,然后单击“下一步”。
4.
单击“完成”以完成该向导。关闭确认消息框,然后单击“确定”关闭证书。
返回页首
验证客户端证书操作
此过程验证您是否可以使用客户端证书访问 SecureApp 应用程序。

验证客户端证书操作
1.
启动 Internet Explorer 并导航至 https://localhost/secureapp/webform1.aspx。
2.
确认 Web 页成功显示。
返回页首
其他资源
有关详细信息,请参见本指南中的如何在 Web 服务器上设置 SSL。

ref:http://www.microsoft.com/china/technet/security/guidance/secmod31.mspx

Monday, April 20, 2009

C#类和接口、虚方法和抽象方法及值类型和引用类型的区别

1.C#类和接口的区别
接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!
而类是负责功能的具体实现!
在类中也有抽象类的定义,抽象类与接口的区别在于:
抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。
但接口是一个行为的规范,里面的所有东西都是抽象的!
一个类只可以继承一个基类也就是父类,但可以实现多个接口
PS:接口除了规范一个行为之外,在具体项目中的实际作用也是十分重要的,在面向对象的设计原则以及设计模式的使用中,无不体现作为一个接口的使用好处,最直接的就是设计原则中OCP(开放封闭原则),我们使用接口,而不需要关心他的具体实现,具体实现的细节变化也无关客户端(使用接口的类)的使用,对与扩展是开放的,我们可以另写一个接口的实现来扩展当前程序,而不影响上层的使用,但对修改是封闭的,即我们不能够再去修改接口的定义,当然这个“不能够”是指在规范原则上不应该这么做!

2.抽象类和接口的区别
答:
抽象类(abstract class)可以包含功能定义和实现,接口(interface)只能包含功能定义
抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性
分析对象,提炼内部共性形成抽象类,用以表示对象本质,即“是什么”
为外部提供调用或功能需要扩充时优先使用接口

3. C#语言中,值类型和引用类型有何不同?

解答
  值类型和引用类型的区别在于,值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。
  值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中。注意,堆和堆栈是两个不同的概念,在内存中的存储位置也不相同,堆一般用于存储可变长度的数据,如字符串类型;而堆栈则用于存储固定长度的数据,如整型类型的数据int(每个int变量占用四个字节)。由数据存储的位置可以得知,当把一个值变量赋给另一个值变量时,会在堆栈中保存两个完全相同的值;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一个堆位置的两个引用,即在堆栈中保存的是同一个堆的地址。在进行数据操作时,对于值类型,由于每个变量都有自己的值,因此对一个变量的操作不会影响到其它变量;对于引用类型的变量,对一个变量的数据进行操作就是对这个变量在堆中的数据进行操作,如果两个引用类型的变量引用同一个对象,实际含义就是它们在堆栈中保存的堆的地址相同,因此对一个变量的操作就会影响到引用同一个对象的另一个变量。

4.结构和类的区别

解答
  1) 结构是一个值类型,保存在栈上,而类是一个引用类型,保存在受管制的堆上。
  2) 对结构中的数据进行操作比对类或对象中的数据进行操作速度要快。
  3) 一般用结构存储多种类型的数据,当创建一个很多类或对象共用的小型对象时,使用结构效率更高。
4.抽象方法和虚方法的区别
抽象方法
使用abstract关键字 public abstract bool Withdraw(…);
抽象方法是必须被派生类覆写的方法。
抽象方法是可以看成是没有实现体的虚方法
如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法

虚方法
使用virtual关键字 public virtual bool Withdraw(…);
调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。
虚方法可以有实现体


---------------------------------------------------------------------------------------------

虚拟方法和抽象方法有什么区别?

抽象方法只有声明没有实现,需要在子类中实现;虚拟方法有声明和实现,并且可以在子类中覆盖,也可以不覆盖使用父类的默认实现

虚拟方法有实现代码

抽象方法则没有,

并且抽象类不能被实例化,只能实例化实现了全部抽象方法的派生类

抽象方法是虚拟方法的一种
抽象方法没有实现,它的存在只是为派生类统一接口;派生类应该实现这个方法
如果编写一个基类,它永远不会被实现,那么就应该将这个类中的一个或多个方法定义为
抽象方法。

抽象方法只有声明没有实现,需要在子类中实现;虚拟方法有声明和实现,并且可以在子类中覆盖,也可以不覆盖使用父类的默认实现

补充一点

只允许在抽象类中使用抽象方法声明

学习

其实大家首先要搞清楚,虚方法与多态性关系密切,虚方法允许派生类完全或部分重写该类的方法,需写方法体。抽象类中可以包含抽象方法与一般的方法,抽象类不可以new,抽象方法只是一个定义,没有方法体,也就是没有{},也不要在里面写内容。它们两个相像的一点是都用override重写

Friday, April 10, 2009

什么是CS和BS结构,两种结构的区别

什么是C/S和B/S结构?

        C/S又称Client/Server或客户/服务器模式。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。

        B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。浏览器通过Web Server 同数据库进行数据交互。

        C/S的优点是能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个:

        只适用于局域网。而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。

        客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。

        对客户端的操作系统一般也会有限制。可能适应于Win98, 但不能用于Win2000或Windows XP。或者不适用于微软新的操作系统等等,更不用说Linux、Unix等。

        B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件。只要有一台能上网的电脑就能使用,客户端零维护。系统的扩展非常容易,只要能上网,再由系统管理员分配一个用户名和密码,就可以使用了。甚至可以在线申请,通过公司内部的安全认证(如CA证书)后,不需要人的参与,系统可以自动分配给用户一个账号进入系统。

C/S 与 B/S 区别:
Client/Server是建立在局域网的基础上的.Browser/Server是建立在广域网的基础上的.


C/S结构B/S结构
硬件环境不同:一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行
对安全要求不同一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息.建立在广域网之上, 对安全的控制能力相对弱, 面向是不可知的用户群.
对程序架构不同程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟.
软件重用不同程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.对的多重结构,要求构件相对独立的功能. 能够相对较好的重用。
系统维护不同程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统, 系统维护开销大构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级.
处理问题不同程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小
用户接口不同多是建立的Window平台上,表现方法有限,对程序员普遍要求较高建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本.
信息流不同程序一般是典型的中央集权的机械式处理, 交互性相对低信息流向可变化, B-B B-C B-G等信息、流向的变化, 更象交易中心