显示标签为“C#编程开发”的博文。显示所有博文
显示标签为“C#编程开发”的博文。显示所有博文

2009年4月22日星期三

C#实现代理访问网络资源,源代码实现,WebClient篇

很多公司都使用代理上网,这样当然是有原因的,因为要对公司员工访问网络进行监视,但是这很令开发人员郁闷,因为在程序中访问网络资源是需要自己设置代理认证的,我们公司就是这样的。幸亏不要紧,因为C#提供了针对访问网络资源代理的设置,今天来讲解WebClient代理问题。下面是一个实现的例子:
private static string GetHtml(string url, EncodingType type, bool isByProxy)
{
WebClient webClient = new WebClient();//创建WebClient实例myWebClient
if (isByProxy)
{
//创建代理服务器设置对象的实例
System.Net.WebProxy wp = new System.Net.WebProxy("ISASRV:80");//代理名称很端口,要根据你的情况来设置
//代理服务器需要验证
wp.BypassProxyOnLocal = false;
//用户名密码,要根据你的情况来设置
wp.Credentials = new NetworkCredential("UserName", "PWD", "hold");
//将代理服务器设置对象赋予全局设定
GlobalProxySelection.Select = wp;
//获取或设置用于对向Internet 资源的请求进行身份验证的网络凭据。
webClient.Credentials = CredentialCache.DefaultCredentials;
}
byte[] pagedata = webClient.DownloadData(url);//先获取二进制的资源
}
就是这样,希望能够对你有帮助。

2009年4月18日星期六

委托用法,C#源代码

1、委托的概念
委托是C#一个非常重要的概念,也是很有用的,因为委托和事件结合起来使用可以完成很多功能(委托是事件的基础),而且可以通过委托来实现函数的匿名方法(通过将委托与命名方法或匿名方法关联,可以实例化委托)。
C#的委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。
2、委托的用法
委托类型声明的格式如下:
public delegate void TestDelegate(string message);delegate 关键字用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法。
为了与命名方法一起使用,委托必须用具有可接受签名的方法进行实例化。有关方法签名中允许的方差度的更多信息,请参见委托中的协变和逆变。为了与匿名方法一起使用,委托和与之关联的代码必须一起声明。
3、实现代码
下面用C#代码来说明如何使用委托(参考自微软msdn):
using System;
// Declare delegate -- defines required signature:
delegate void SampleDelegate(string message);
class MainClass
{
// Regular method that matches signature:
static void SampleDelegateMethod(string message)
{
Console.WriteLine(message);
}
static void Main()
{
// Instantiate delegate with named method:
SampleDelegate d1 = SampleDelegateMethod;
// Instantiate delegate with anonymous method:
SampleDelegate d2 = delegate(string message)
{
Console.WriteLine(message);
};
// Invoke delegate d1:
d1("Hello");
// Invoke delegate d2:
d2(" World");
}
}

2009年4月14日星期二

C#常用函数列表(二)

11、string str=Request.QueryString["变量"];
用超链接传送变量。如在任一页中建超链接href="Edit.aspx?fbid="23"点击.在Edit.aspx页中取值:String str=Request.QueryString["fdid"];
12、DOC对象.CreateElement("新建节点名");
创建XML文档新节点
13、父节点.AppendChild(子节点);
将新建的子节点加到XML文档父节点下
14、 父节点.RemoveChild(节点);
删除节点
15、Response
Response.Write("字串");Response.Write(变量);向页面输出。Response.Redirect("URL地址");
跳转到URL指定的页面
16、char.IsWhiteSpce(字串变量,位数)--逻辑型
查指定位置是否空字符;如:string str="中国人"Response.Write(char.IsWhiteSpace(str,2));//结果为:True, 第一个字符是0位,2是第三个字符。
17、char.IsPunctuation('字符') --逻辑型
查字符是否是标点符号如:Response.Write(char.IsPunctuation('A')); //返回:False
18、(int)'字符'
把字符转为数字,查代码点,注意是单引号。如:Response.Write((int)'中'); //结果为中字的代码:20013
19、(char)代码
把数字转为字符,查代码代表的字符。如:Response.Write((char)22269); //返回“国”字。
20、 Trim()
清除字串前后空格

2009年4月12日星期日

c# params,params用法,代码

在C#语言里,params 关键字可以指定在参数数目可变处采用参数的方法参数。
把数组作为参数的一个关键字,目的是做出如 a(parm1,parm2.parm3,....parmn) ,这样调用方式的函数,也就是同一种类型的不定个数参数列表,如果声明时没用parms关键字就如下调用,实际上是一样的
a(new type[]{parm1,parm2.parm3,....parmn});
在方法声明中的 params 关键字之后不允许任何其他参数,并且在方法声明中只允许一个 params 关键字,下面是具体示例代码:
using System;
public class MyClass
{
public static void UseParams(params int[] list)
{
for (int i = 0 ; i < list.Length; i++)
{
Console.WriteLine(list[i]);
}
Console.WriteLine();
}
public static void UseParams2(params object[] list)
{
for (int i = 0 ; i < list.Length; i++)
{
Console.WriteLine(list[i]);
}
Console.WriteLine();
}
static void Main()
{
UseParams(1, 2, 3);
UseParams2(1, 'a', "test");
// An array of objects can also be passed, as long as
// the array type matches the method being called.
int[] myarray = new int[3] {10,11,12};
UseParams(myarray);
}
}

学习C#编程语言的几个阶段

很多人在自己的简历里都写着精通C#编程语言,可是现实中真的有那么多高手吗?下面是李建忠(《Microsoft .NET框架程序设计》作者)对学习C#语言达到的境界的几个层次:
1. 基本运用C#语法,在各种工具和示例代码的支持下,完成一些基本程序任务
2. 熟练掌握面向对象与组件构造,知其然亦知其所以然,完成一般小规模信息管理类软件项目开发任务
3. 深入理解CLR内核机制,对各种类型与.NET平台机制的优缺点、适用场合、效率有清晰把握,能够完成技术复杂度比较高的项目。
4. 能够游刃有余把握松耦合原则,精准运用各种语言构造,架构大型软件项目。
5. 能够站在计算机抽象、系统和历史发展的高度来理解和把握编程语言
个人觉得自己只能够是出于2到3这个阶段。

2009年4月11日星期六

C#语言编程常用知识介绍

1)decimal,即十进制类型,是一种高精度、128位数据类型,它所表示的范围从大约1.0*10^-28到7.9*102^28的28至29位有效数字,注意该精度是以位数(digits)而不是以小数位(decimal places)来表示的。
2)decimal类型的变量在赋值时要在值后面加m下标,否则将被编译器当作double类型处理。
3)System.delegate 代表,引用类型,用于指向一个方法,定义方法:delegate int MyDelegate();
4)多维数组定义一例:int[,] a=new int[,]{{1,2,3},{4,5,6}}
5)多维数组定义另一例:int[][] b=new int[3][];b[0]=new int[]{1,2,3};b[1]=new int[]{1,2,3,4,5,6};b[2]=new int[]{1,2,3,4,5,6,7,8,9};
6)可以在变量名前面加上@,这主要是为了在与其他语言交互时避免冲突,一般情况下不推荐使用。
7)变量有以下以种:静态变量、非静态变量、数组元素、值能数、引用参数、输出参数、局部参数。
8)常量const修饰符有:new,public,protected,internal,private。
9)隐式枚举类型允许把十进制整数0转换为任何枚举类型,对应其他的整数则不存在这种隐式转换。
10)显式转换有可能丢失信息或导致异常抛出。
11)常量1.0默认为double类型,若要使用float型,可写成1.0f,即在数值后面加个f。
12)在逻辑表达式的求值过程中,不是所有的逻辑操作符都被执行,这种情况称为“短路”。
13)一般来说每个switch项都以break,goto case,goto default结束,但实际上任何一种不导致“遍历”的结构都是允许的。
14)C#中提供了析构函数,用于专门释放被占用的系统资源;析构函数的名称为“~类名”,它不接收任何参数,不返回值,不能被继承;C#提供垃圾收集器帮助我们解决释放资源的工作。
15) 方法修饰符可以是:new,public,protected,internal,private,static,virtual,sealed, override,abstract,extern。对于使用了abstract,extern修饰符的方法,方法的执行体仅仅只有一个简单的分号。其他的方法执行体应包含调用该方法所要执行的语句。
16)方法参数四种类型:值类型(不需修饰符)、引用类型(以ref修饰符声明)、输出类型(以out修饰符声明)、数组型类型(以params修饰符声明)
17)如果方法的形参表中包含了数组型参数,那么它必须在参数表中位于最后。另外,参数只允许是一维数组。比如:string[],string[][]类型都可以作为数组型参数,而string[,]则不能。最后,数组型参数不能再有ref和out修饰符。
18)静态方法只能访问类中的静态成员。
19)操作符重载方法:在定义类方法时,在方法名称后面加上“[空格]operator[空格][具体的操作符]”,如以下方法:public static Player operator ++(Player p){method body...}
20)可重载的操作符:+,-,!,~,++,--,true,false,*,/,%,&,,^,<<,>>,==,!=,>,<,>=,<=。注:这里列出的操作符之间用“,”隔开。
21)不可重载的操作符:=,&&,,?:,new,typeof,sizeof,is
22)域的修饰符:new,public,protected,internal,private,static,readonly
23) 属性的修饰符:new,public,protected,internal,private,static,virtual,sealed, override,abstract,以上修饰符中,static,virtual,override,abstract不能同时使用。
24)事件的修饰符:new,public,protected,internal,private,static,virtual,sealed, override,abstract,以上修饰符中,static,virtual,override,abstract不能同时使用。
25)构造函数和析构函数不能被继承。
26)在派生类中覆盖基类中的方法时,在方法前面加上new关键字可关闭编译器的警告。
27)base关键字主要是为派生类调用基类成员提供一个简写的方法。
28)C#中的多态性有两种:编译时的多态性和运行时的多态性;编译时的多态性是通过重载实现的,运行时的多态性是通过虚成员实现的;编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度的灵活和抽象的特点。
29)方法在使用了virtual修饰符之后,不允许再有static,abstract或override修饰符。
30)在派生类中重新定义基类的虚方法时,要求方法名称、返回值类型、参数表中的参数个数、类型、顺序都必须与基类中的虚方法完全一致。
31)在派生类中声明对虚方法的重载,要求在声明中加上override关键字,而且不能有new,static或virtual修饰符。
32)抽象类只能作为其他类的基类,不能被实例化。
33)只能在抽象类中声明抽象方法,抽象方法不包含具体的实现内容,不能再使用static或virtual修饰符,不能出现{},如:public abstract void speak();
34)抽象类中的抽象方法在派生类中不能使用base关键字来进行访问。
35)可以利用抽象方法来重载基类的虚方法,这时基类中的虚方法的执行代码这被“拦截”了。
36)密封类(使用sealed修饰符的类)不能被其他类继承。
37)将方法密封可防止方法所在的类的派生类对该方法重载。
38)不是类的每个成员方法都可以作为密封方法,密封方法必须对基类的虚方法进行重载,提供具体的实现方法。
39)和类的成员方法一样,我们也可以定义属性的重载、虚属性、抽象属性、以及密封属性的概念。
40)接口仅可以使用下列修饰符:new,public,protected,internal,private。
41)接口的成员可以是属性、方法、事件和索引指示器。
42)C#中类继承只允许单继承,但接口允许多继承,多个父接口之间用“,”隔开,被继承的接口应该是可以访问的,如从private类型和internal类型的接口中继承就是不允许的。
43)接口成员的默认访问方式是public,接口成员不能包含任何修饰符。
44)由于接口允许多继承,所以要注意接口成员的是否有二义性。
45)显式接口成员只能通过接口调用。
46)显式接口成员执行体不能使用任何访问修饰符。
47)使用private,protected和static修饰符的成员不能参与实现接口映射。
48)如果不显式地重新实现接口,派生类就无法改变从基类中继承来的接口映射。但是,当一个接口方法被映射到类的一个虚方法时,派生类就可以重载这个虚方法,并且改变这个接口的实现。
49)继承了接口实现的类可以对接口进行重实现。
50)有关接口的几个概念:显式接口成员执行体、
50) 各个流:Stream,BinaryReader,BinaryWriter,File,Directory,FileStream, TextReader,TextWriter,StringReader,StringWriter,StreamReader,StreamWriter, BufferedStream,MemoryStream,NetworkStream;对网络文件进行操作使用IsolatedStorage类处理,不用流。

C#最常用函数

以下是我们在开发过程中最为常用的一些函数:
1、DateTime 数字型
System.DateTime currentTime=new System.DateTime();
1.1 取当前年月日时分秒
currentTime=System.DateTime.Now;
1.2 取当前年
int 年=currentTime.Year;
1.3 取当前月
int 月=currentTime.Month;
1.4 取当前日
int 日=currentTime.Day;
1.5 取当前时
int 时=currentTime.Hour;
1.6 取当前分
int 分=currentTime.Minute;
1.7 取当前秒
int 秒=currentTime.Second;
1.8 取当前毫秒
int 毫秒=currentTime.Millisecond;
(变量可用中文)

2、Int32.Parse(变量) Int32.Parse("常量")
字符型转换 转为32位数字型

3、 变量.ToString()
字符型转换 转为字符串
12345.ToString("n"); //生成 12,345.00
12345.ToString("C"); //生成 ¥12,345.00
12345.ToString("e"); //生成 1.234500e+004
12345.ToString("f4"); //生成 12345.0000
12345.ToString("x"); //生成 3039 (16进制)
12345.ToString("p"); //生成 1,234,500.00%

4、变量.Length 数字型
取字串长度:
如: string str="中国"
int Len = str.Length ; //Len是自定义变量, str是求测的字串的变量名

5、System.Text.Encoding.Default.GetBytes(变量)
字码转换 转为比特码
如:byte[] bytStr = System.Text.Encoding.Default.GetBytes(str);
然后可得到比特长度:
len = bytStr.Length;

6、System.Text.StringBuilder("")
字符串相加,(+号是不是也一样?)
如:System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("中华");
sb.Append("人民");
sb.Append("共和国");

7、变量.Substring(参数1,参数2);
截取字串的一部分,参数1为左起始位数,参数2为截取几位。
如:string s1 = str.Substring(0,2);

8、String user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
取远程用户IP地址

9、穿过代理服务器取远程用户真实IP地址:
if(Request.ServerVariables["HTTP_VIA"]!=null){
string user_IP=Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
}else{
string user_IP=Request.ServerVariables["REMOTE_ADDR"].ToString();
}

10、 Session["变量"];
存取Session值;
如,赋值: Session["username"]="小布什"

取值: Object objName=Session["username"];
String strName=objName.ToString();
清空: Session.RemoveAll();

2009年4月9日星期四

C#基础学习

深入理解什么是委托
委托就是函数指针,先定义了一个委托,然后将它的实例指向某个特定的方法(函数),通过这个委托的实例就可以调用其方法。
1、要想使得委托可以工作,必须有定义好的方法(函数),这是一种方式;
2、可以通过匿名方法来作为委托参数的一个代码块。
匿名方法其实就是在实例化委托的时候给委托定义了代码块,可以实现某些功能,再调用委托的时候就可以直接使用这些代码块了。
注意:匿名方法不能跳转到外部,外部也不能跳转到匿名方法;匿名方法内部不能访问安全代码,也不能在外部使用ref和out参数。
深入理解集合
在C#中应该能够灵活地使用数组列表、字典和集合,这样才可以获取程序的最佳性能。最主要的有下面这些:集合;数组列表;栈;队列;有序列表;字典。集合大都可以通过语句来实现访问:
forreach(string item in Items)
{
writeline(item);
}
1、数组列表(ArrayList)
常用的方法Add,Insert,RemoveAt,AddRange。
2、Stack类
适合于处理应用程序使用完后就删除的临时数据项,先进后出。
3、Queue类
和Stack差不多,只不过是先进先出。
4、SortedList类
在使用SortedList类的时候,每一项都会指定一个用于引用改项的标识键。可以通过GetKeyList()和GetValueList()来获取键和值。
5、字典和散列
字典和散列总是会跟HashTable联系起来。
深入理解泛型
引入泛型最大的好处就是避免大量的装箱和拆箱操作,而且能够简化大量代码。