w3cfans vip xhtmlcss页面布局系列教程价值386元w3school_第1页
w3cfans vip xhtmlcss页面布局系列教程价值386元w3school_第2页
w3cfans vip xhtmlcss页面布局系列教程价值386元w3school_第3页
w3cfans vip xhtmlcss页面布局系列教程价值386元w3school_第4页
w3cfans vip xhtmlcss页面布局系列教程价值386元w3school_第5页
已阅读5页,还剩388页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

W3SchoolC#&C#CAndersHejlsberg.NetC#是专为公共语言基础结构(CLI)设计的。CLI由可执行代码和运行时环境组成,允许在不同的计算机平台和体系结构#C##布尔条件(Boolean自动回收(AutomaticGarbageCollection)标准库(StandardLibrary)组件版本(AssemblyVersioning)委托(Delegates)和管理(EventsManagement)条件编译(ConditionalCompilation)LINQ和Lambda表达式C#序。因此,在讨论运行C#程序的可用工具之前,让我们先了解一下C#与.Net框架之间的关系。.Net框架(.NetWeb应用程序Web服务.Net框架应用程序是多平台的应用程序。框架的设计方式使它适用于下列各种语言:C#、C++、VisualBasic、Jscript、COBOL等等。所有这些语言可以框架,彼此之间也可以互相交互。#公共语言运行库(CommonLanguageRuntime.Net框架类库(.NetFrameworkClassLibrary)公共语言规范(CommonLanguageSpecification)通用类型系统(CommonTypeSystem)Windows窗体(WindowsForms)ASP.Net和ASP.NetAJAXWindows工作流基础(WindowsWorkflowFoundation-WF)Windows显示基础(WindowsPresentationFoundation)Windows通信基础(WindowsCommunicationFoundationWCF)C#的集成开发环境(IntegratedDevelopmentEnvironment-VisualStudio2010VisualC#2010ExpressVisualWeb后面两个是免费使用的,可从微软。使用这些工具,您可以编写各种C#程序,从简单令行应用程序到更复杂的应用程序。您也可以使用基本的文本编辑器(Notepad)C#源代码文件,并使用命令行编译器(.NETVisualC#ExpressVisualWebDeveloperExpressVisualStudio的定制版本,且具有相同的外观和感观。它们保留VisualStudio的大部分功能。在本中,我们使用的是VisualC#2010Express。您可以从VisualStudio上进行。它会自动安装在您的机器上。请注意,您需要一个可用的网络连接来完成LinuxMacOSC#.NETWindows操作系统上,但是也有一些运行于其它操作系统上的版本可供选择。Mono.NETC#LinuxMacOS。如需了解详情,请GoMono。Mono.NETLinux开发者提供了更好的开发工具。Mono可运行在多种操作系统上,包括Android、BSD、iOS、Linux、OSX、Windows、Solaris和UNIX。C###C#oWorld实命名空间(Namespacedeclaration)一个classClassClass语句(Statements)&表达式(Expressions)usingusing{{staticvoidMain(string[]{/*我的第一个C#程序*/ oWorld");}}}oo下一行是class。类oWorld包含了程序使用的数据和方法。类一般包含多个方法。方法定义了类的行为。在这里,oWorld类只有一个Main方法。下一行/*...*/将会被编译器忽略,且它会在程序中添加额外的注释。Studio.NET启动时屏幕会快速运行并关闭。&C##FileNewProject选择ConsoleApplication。新项目会出现在解决方案资源管理器(SolutionExplorer)中。在代码编辑器(CodeEditor)中编写代码。点击Run按钮或者按下F5键来运行程序。会出现一个命令提示符窗口(CommandPromptwindow),显示oVisualStudioIDEC保存文件为oworld.cs。 如果代码没有错误,命令提示符会进入下一行,并生成oworld.exe可执行文件。接下来,键入oworld来执行程序。C#C#是一种面向对象的编程语言。在面向对象的程序设计方法中,程序由各种相互交互的对象组成。相同种类的对象通常具有相同的类型,或者说,是在相同的class中。Rectangle(矩形)lengthwidth属性。根据设计,它可能需要接受这些属性值、计算面积#usingusingnamespace{class{//成员变量doublewidth;publicvoid{length=width=}publicdouble{returnlength*}publicvoid { ine("Length:{0}",length); ine("Width:{0}",width); }}class{staticvoidMain(string[]{Rectangler=newRectangle();}}}Length:Length:Width:Area:usingusingusingclassC#/*/*ThisprogramThebasicsyntaxofC#programmingLanguage*/}//end}//endclass GetArea和Disy()标识符必须以字母开头,后面可以跟一系列的字母、数字(09)或下划线(_)。标识符中的第一个字符不能是@^&*。但是,可以使用下划线(C#C#编译器预定义的保留字。这些关键字不能用作标识符,但是,如果您想使用这些关键字作为标识符,可以在关键字前面加上@字符作为前缀。下表列出了C#中的保留关键字()和上下文关键字 C#C中,变量分为以下几种类型:值类型(Valuetypes)指针类型(Pointertypes)值类型(Value值类型直接包含数据。比如int、char、float,它们分别数字、字母、浮点数。当您一个int类型时,系统分配00 U(-7.9x10287.9x1028100(+/-)5.0x10-324(+/-)1.7x-3.4x10383.4x000000000namespacenamespace{class{staticvoidMain(string[]{Console.Wriine("Sizeofint:{0}",sizeof(int));}}}SizeSizeofint:类型(Reference变量改变的,其他变量会自动反映这种值的变化。内置的类型有:object、dynamic和string。对象(Object)对象(Object)类型是C#通用类型系统(CommonTypeSystem-CTS)中所有数据类型的终极基类。Object是System.Object类的别名。所以对象(Object)类型可以被分配任何其他类型(值类型、类型、预定义类型或用户自objectobjectobj100;动态(Dynamic)dynamicdynamic<variable_name>=dynamicdynamicd=字符串(String)字符串(String)(String)System.StringStringStringstr=#stringstringstr=stringstringstr=stringstringstr=@"<script指针类型(Pointertype*指针类型变量另一种类型的内存地址。C#中的指针与C或C++中的指针有相同的功能。type*int*iptr;C##隐式类型转换C#默认的以安全方式进行的转换。例如,从小的整数类型转换为大的整数类型,从派-namespacenamespace{class{staticvoidMain(string[]{doubled=5673.74;inti;doubleinti=(int)d; }}}}C##123456789namespacenamespace{class{staticvoidMain(string[]{inti=floatf=53.005f;doubled=2345.7652;boolb=true;Console.Wriine(i.ToString());Console.Wriine(f.ToString());Console.Wriine(d.ToString());Console.Wriine(b.ToString());}}}C#一个变量只不过是一个供程序操作的区的名字。在C#中,每个变量都有一个特定的类型,类型决定了变量的内存大#C#允许定义其他值类型的变量,比如enum,也允许定义类型变量,比如class。这些在以后的章节中进行C#<data_type><data_type>#inti,j,k;charc,ch;inti,j,k;charc,ch;doubled;intinti=C#variable_namevariable_name=<data_type><data_type><variable_name>=intd=3,f=5; /*intd=3,f=5; /*初始化d和f.*/bytez=22; /*初始化z.*/doublepi=3.14159;/* pi的近似值*/charx /*变量x的值为'x'namespacenamespace{class{staticvoidMain(string[]{shorta;intb;/*a=b=c=a+ ine("a={0},b={1},c={2}",a,b,c);}}}aa=10,b=20,c=intintnum=()CLvaluesintintg=1010=C#整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x0X表示十六进制,0表示八进制,没有前缀则UL的组合,其中,ULunsignedlong。后缀可以是大写或者小写,/*合法/*合法/*合法 :8

/*十进制/*八进制/*十六进制/*int/*int/*long/*无符号long/*合法/*合法 时包含两者。有符号的指数是用e或E表示的。C#中有一些特定的字符,当它们的前面带有反斜杠时有特殊的意义,可用于表示换行符(\n)tab(\t)。在Alert\spacenamespace{class{staticvoidMain(string[]{ }}} @""里。字符串常量包含的字符与字符常量相似,可以是:普通字符、转义序"""o,o,""d"oconstconst<data_type><constant_name>=usingusingnamespace{class{staticvoidMain(string[]{constdoublepi3.14159;double ine("EnterRadius:doubleareaCircle=pi*r*r; ine("Radius:{0},Area:{1}",r,areaCircle);}}}EnterEnter3Radius:3,Area:C#运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。C#有丰富的内置运算符,分类如下:+-*/%#usingusingnamespace{class{staticvoidMain(string[]{inta=21;intb=10;intc;c=a+Console.Wriine("Line1-c的值是{0}",c);c=a-b;Console.Wriine("Line2-c的值是{0}",c);c=a*b;Console.Wriine("Line3-c的值是{0}",c);c=a/b;Console.Wriine("Line4-c的值是{0}",c);c=a%b;Console.Wriine("Line5-c的值是{0}",c);c=a++;Console.Wriine("Line6-c的值是{0}",c);c=a--;Console.Wriine("Line7-c的值是{0}",c);}}}Line1c的值是Line2c的值是Line3c的值是Line4c的值是Line5c的值是Line6c的值是Line7c的值是(AB(AB>(AB<(AB(AB(AB#usingusingclass{staticvoidMain(string[]{inta=21;intb=if(a=={}{}

Console.Wriine("Line1-a等于Console.Wriine("Line1-a不等于if(a<{}{}

Console.Wriine("Line2-a小于Console.Wriine("Line2-a不小于if(a>{}{}

Console.Wriine("Line3-a大于Console.Wriine("Line3-a不大于/*改变a和b的值a=b=if(a<={Console.Wriine("Line4-a小于或等于}if(b>={Console.Wriine("Line5-b大于或等于}}}Line1abLine2abLine3-a大于bLine4abLine5b大于或等于# (A&&B(A||B!!(A&&B#usingSystem;{class{staticvoidMain(string[]{boola=true;boolb=if(a&&{Console.Wriine("Line1-条件为真}if(a||{Console.Wriine("Line2-条件为真}/*改变a和b的值a=b=true;if(a&&b){}{}

Console.Wriine("Line3-条件为真Console.Wriine("Line3-条件不为真if(!(a&&{Console.Wriine("Line4-条件为真}}}}Line1-Line1-条件为真Line2-条件为真Line3条件不为真Line4-条件为真pqp&p|p^00000010111111010011A=0011B=0000A&B=0000A|B=0011A^B=0011~A=1100&|^~(~A)将得到-61,即为1100#usingSystem;usingSystem;{class{staticvoidMain(string[]{inta= /*60=00111100intb=13; /*13=00001101*/intc=0;c=a&b; /*12=00001100*/Console.Wriine("Line1-c的值是{0}",c);c=a|b; /*61=00111101*/Console.Wriine("Line2-c的值是{0}",c);c=a^b; /*49=00110001*/Console.Wriine("Line3-c的值是{0}",c);c=~a; /*-61=11000011*/Console.Wriine("Line4-c的值是{0}",c);c=a<< /*240=11110000Console.Wriine("Line5-c的值是{0}",c=a>> /*15=00001111Console.Wriine("Line6-c的值是{0}",c);}}}Line1c的值是Line2c的值是Line3c的值是Line4c的值是-Line5c的值是Line6c的值是=CABABCCACCCACCC*ACC*CACCCACCC2CCC2CCC&2CC&C^=2CC^C|=2CC|#usingSystem;{class{staticvoidMain(string[]{inta=21;intc;c=Console.Wriine("Line1-=c的值={0}",c+=Console.Wriine("Line2-+=c的值={0}",c-=Console.Wriine("Line3--=c的值={0}",c*=Console.Wriine("Line4-*=c的值={0}",c/=Console.Wriine("Line5-/=c的值={0}",c=c%=Console.Wriine("Line6-%=c的值={0}",c<<=Console.Wriine("Line7-<<=c的值={0}",c>>=Console.Wriine("Line8->>=c的值={0}",c&=Console.Wriine("Line9-&=c的值={0}",c);c^=2; ine("Line10^=c0}c);c|=2;Console.Wriine("Line11-|=c的值={0}",c);}}}Line1-= c的值=21Line2-+= c的值=42Line3--= c的值=21Line4-*= c的值=441Line5-/= c的值=21Line6-%= c的值=11Line7-<<= c的值=44Line8->>= c的值=11Line9-&= c的值=2Line10-^= c的值=0Line11-|= c的值=2sizeof()返回数据类型的大小。sizeof(int)4.typeof()class的类型。typeof(StreamReader);&返回变量的地址。&a;*变量的指针。*a;?:?则XYis判断对象是否为某一类型。If(FordisCar)//FordCaras强制转换,即使转换失败也不会抛出异常。Objectobj=newStringReader("o");StringReaderr=objasStringReader;usingusingnamespace{class{staticvoidMain(string[]{/*sizeof ine("int的大小是{0}",sizeof(int)); ine("short的大小是{0}",sizeof(short)); inta,b;a=b=(a==1)?20: ine("b{0b=(a==10)?20: ine("b{0b);}}}intshortdoubleb的值是b的值是C#x73*2,在这里,x1320*3*2,然后再加上7。()[]->.++-+-!~++--(type)*&*/+<<<<=>==&^|=+=-=*=/=%=>>=<<=&=^=,usingusingnamespace{class{staticvoidMain(string[]{inta=20;intb=10;intc=15;intd=5;inte;e=(a+b)*c/d;//(30*15)/5Console.Wriine("(ab)*cd{0e=((a+b)*c)/d; //(30*15)/5 ine("((ab)*c)d{0e);e=(a+b)*(c/d); //(30)*(15/5) ine("(ab)*cd{0e);e=a+(b*c)/d; //20+(150/5) ine("ab*c)d{0e);}}}(a+b)*c/d(a+b)*c/d的值是90((ab)*cd90(ab*cd90a+(b*c)/d的值是50C#判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行if?:Exp1Exp1?Exp2:Exp1Exp1Exp2Exp1为假,则计算Exp3的值,结果即为整个?表达式的值。C#如果条件不为假,则循环将变成无限循环。for循环在传统意义上可用于实现无限循环。由于构成循环的三个表达式usingusingnamespace{class{staticvoidMain(string[]{for(;;{ ine("Hey!Iam}}}}(;;)C#"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对ProtectedPublic修饰usingusingnamespace{class{publicdoublewidth;publicdouble{returnlength*}publicvoid{}}//endclassRectangleclass{ine("{0ine("{0ine("{0staticvoidMain(string[]{Rectangler=newRectangle();r.length=4.5; }}}长度:长度:宽度:面积:Private修饰Private修饰符允许一个类将其成员变量和成员函数对其他的函数和对象进行隐藏。只有同一个类中的函数可以usingnamespace{class{privatedoublewidth;publicvoid{width=}publicdouble{returnlength*}publicvoidDis{ ine("长度:{0}",length); ine("宽度:{0}",width); }}//endclassRectangleclass{staticvoidMain(string[]{Rectangler=newRectangle();}}}长度:宽度:面积:成员函数AcceptDetails()和Disy()可以这些变量。Protected修饰Protected修饰符允许子类它的基类的成员变量和成员函数。这样有助于实现继承。在继承的章节详细讨Internal修饰usingusingnamespace{class{internaldoublewidth;double{returnlength*}publicvoid { ine("长度:{0}",length); ine("宽度:{0}",width); }}//endclassRectangleclass{staticvoidMain(string[]{Rectangler=newRectangle();r.length=4.5;r.width=3.5; }}}长度:长度:宽度:面积:在上面的实例中,请注意成员函数GetArea()的时候不带有任何修饰符。如果没有指定修饰符,则使用类成员的默认修饰符,即为private。ProtectedInternal修饰ProtectedInternal修饰符允许一个类将其成员变量和成员函数对同一应用程序内的子类以外的其他的类对象和函数进C#C#<Access<AccessSpecifier><ReturnType><MethodName>(Parameter{Method}Returntype:返回类型,一个方法可以返回一个值。返回类型是方法返回的值的数据类型。如果方法不返回任何值,则返回类型为void。Methodname:方法名称,是一个唯一的标识符,且是大小写敏感的。它不能与类中的其他标识符相同。Parameterlist:参数列表,使用圆括号括起来,该参数是用来传递和接收方法的数据。参数列表是指方法的参数类下面的代码片段显示一个函数FindMax,它接受两个整数值,并返回两个中的较大值。它有public修饰符,所以它 classclass{publicintFindMax(intnum1,int{/*局部变量 intresult;if(num1>num2)result=num1;result=return}}C#usingusingnamespace{class{publicintFindMax(intnum1,int{/*局部变量 intresult;if(num1>num2)result=num1;result=return}staticvoidMain(string[]{inta=100;intb=200;intret;NumberManipulatorn=new//FindMaxret=n.FindMax(a, ine("{0}",ret}}}FindMaxNumberManipulator类,您可以从另一个类Test中调用它。usingusingnamespace{class{publicintFindMax(intnum1,int{/*局部变量*/intresult;if(num1>num2)result=return}}class{staticvoidMain(string[]{inta=100;intb=200;intret;NumberManipulatorn=new//FindMaxret=n.FindMax(a,b);Console.Wriine("最大值是:{0}",ret);}}}usingusingnamespace{class{publicintfactorial(int{intresult;if(num=={return}{result=factorial(num-1)*return}}staticvoidMain(string[]{NumberManipulatorn=new//factorialConsole.Wriine("6的阶乘是:{0}",n.factorial(6));Console.Wriine("7的阶乘是:{0}",n.factorial(7));Console.Wriine("8的阶乘是:{0}",n.factorial(8));}}}#usingusingnamespace{class{publicvoidswap(intx,int{inttempx;/*保存x的值x /*把y赋值给xytemp;/*把temp赋值给y}staticvoidMain(string[]{NumberManipulatorn=newinta=100;intb= ine("在交换之前,a的值:{0}",a); ine("在交换之前,b的值:{0}",n.swap(a,b); ine("在交换之后,a的值:{0}",a); ine("在交换之后,b的值:{0}",}}}在交换之前,在交换之前,a的值:100在交换之前,b的值:200在交换之后,a的值:100在交换之后,busingusingnamespace{class{publicvoidswap(refintx,refint{inttempx;/*保存x的值x /*把y赋值给xytemp;/*把temp赋值给y}staticvoidMain(string[]{NumberManipulatorn=newinta=100;intb= ine("在交换之前,a的值:{0}",a); ine("在交换之前,b的值:{0}",/**/n.swap(refaref ine("在交换之后,a的值:{0}",a); ine("在交换之后,b的值:{0}",}}}在交换之前,在交换之前,a的值:100在交换之前,b的值:200在交换之后,a的值:200在交换之后,breturnusingusingnamespace{class{publicvoidgetValue(outintx{inttemp=5;x=temp;}staticvoidMain(string[]{NumberManipulatorn=newinta=100; ine("在方法调用之前,a{0n.getValue(outa); }}}}在方法调用之前,在方法调用之前,a在方法调用之后,ausingusingnamespace{class{publicvoidgetValues(outintx,outinty{ ine(" ine("请输入第二个值:");y=}staticvoidMain(string[]{NumberManipulatorn=newinta,b;/*调用函数来获取值*/n.getValues(outaoutb);Console.Wriine("在方法调用之后,a{0a);Console.Wriine("在方法调用之后,b{0b);}}}78在方法调用之后,a在方法调用之后,bC#可空类型C#可空类型C#提供了一个特殊的数据类型,nullable类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,再加上一个null值。例如,NullableInt32,读作"Int32"-2,147,483,6482,147,483,647之间的任意值,也可以被赋值为null值。类似的,Nullable<bool>变量可以被赋值为truefalsenull。null赋值给数值类型或布尔型的功能特别有用。例如,数据库中的布尔型字段可以值true或false,或者,该字段也可以未定义。<<data_type>?<variable_name>=usingusingnamespace{class{staticvoidMain(string[]{int?num1=null;int?num2=45;double?num3=newdouble?();double?num4=3.14157;bool?boolval=new ine("{012num1,num2,num3,num4); }}}45,Null合并运算符(??Null合并运算符用于定义可空类型和类型的默认值。Null合并运算符为类型转换定义了一个预设值,以防可空类型的值为Null。Null合并运算符把操作数类型隐式转换为另一个可空(或不可空)的值类型的操作数的类型。usingusingnamespace{class{staticvoidMain(string[]{double?num1=null;double?num2=3.14157;doublenum3;num3=num1?? ine("num3{0num3);num3=num2??5.34; ine("num3{0num3);}}}num3num3num3的值:C#数组数组是一个相同类型元素的固定大小的顺序集合。数组是用来数据的集合,通常认为数组是一个同一类型变量的数组变量并不是number0、number1、...、number99一个个单独的变量,而是一个就像numbers这样的numbers[0]、numbers[1]、...、numbers[99]来表示一个个单独的变量。数组中某个指定的元素是通过索引来的。datatype[]datatype[]datatype用于指定被在数组中的元素的类型。[]指定数组的秩(维度)。秩指定数组的大小。arrayName指定数组的名称。double[]double[]数组是一个类型,所以您需要使用new关键字来创建数组的实例。double[]double[]balance=newdouble[]double[]balance=newdouble[10];balance[0]=4500.0;double[]double[]balance={2340.0,4523.69,intint[]marks=newint[5]{99,98,92,97,intint[]marks=newint[]{99,98,92,97,intint[]marks=newint[]{99,98,92,97,95};int[]score=marks;当您创建一个数组时,C#编译器会根据数组类型隐式初始化每个数组元素为一个默认值。例如,int数组的所有元素都会被初始化为0。doubledoublesalary=usingusingnamespace{class{staticvoidMain(string[]{int[]nnewint[10/*n10*/inti,j;/*初始化数组n中的元素*/fori0;i10;i{n[i]=i+}/*输出每个数组元素的值*/forj0j10;j{Console.Wriine("Element[{0}]={1}",j,}}}}==========foreachusingusingnamespace{class{staticvoidMain(string[]{intnnewint[10*n10/*nfor(inti=0;i<10;i++{n[i]=i+}foreach(intjinn){inti=j- ine("Element[{0}]={1}",i,j);}}}}}==========C##ArrayC#字符串在C#中,您可以使用字符数组来表示字符串,但是,更常见的做法是使用string关键字来一个字符串变量。string关键字是System.String类的别名。String通过使用String类构造函数+usingusingnamespace{class{staticvoidMain(string[]{fname="Rowan";lname="Atkinson";stringfullname=fname+lname;//stringchar[]letters={'H','e','l','l','o'};stringgreetings=newstring(letters);string[]sarray={"o","From","Tutorials","Point"};stringmessage=String.Join("",sarray);Console.Wriine("Message:{0}",message);DateTimewaiting=newDateTime(2012,10,10,17,58,1);stringchat=String.Format("Messagesentat{0:t}on{0:D}",Console.ReadKey();}}}FullFullName:RowanAtkinson oFromTutorialsMessage:Messagesentat5:58PMonWednesday,October10,String12String1publicstaticintCompare(stringstrA,stringstrB234567publicstaticstringCopy(stringstr8)9publicboolEquals(stringvaluepublicstaticboolEquals(stringa,stringbpublicintIndexOf(charvaluepublicintIndexOf(stringvaluepublicintIndexOf(charvalue,intstartIndex的索引,索引从0开始。publicintLastIndexOf(charvalueusingusingnamespace{class{staticvoidMain(string[]{stringstr1="Thisistest";stringstr2="Thisisif pare(str1,str2)=={Console.Wriine(str1+"and"+str2+"are}{Console.Wriine(str1+"and"+str2+"arenot}}}}ThisThisistestandThisistextarenot字符串包含字符串:usingusingnamespace{class{staticvoidMain(string[]{stringstr="Thisistest";if(str.Contains("test")){ ine("Thesequence'test'was}}}}TheThesequence'test'wasusingusingnamespace{class{staticvoidMain(string[]{stringstr="LastnightIdreamtofSanPedro";stringsubstr=str.Substring(23);}}}SanSanusingusingnamespace{class{staticvoidMain(string[]{string[]starray=newstring[]{"Downthewaynightsaredark","Andthesunshinesdailyonthemountaintop","Itookatriponasailingship","AndwhenIreachedJamaica","Imadeastringstr=String.Join("\n",starray); }}}DownthewaynightsareAndthesunshinesdailyonthemountaintopItookatriponasailingshipAndwhenIreachedJamaicaImadeastopC#结构在C#中,结构是值类型数据结构。它使得一个单一变量可以各种数据类型的相关数据。struct关键字用于创建结Bookstruct语句。struct语句为程序定义了一个带有多个成员的新的数据类型。例如,您可以按照如下的方式Book结构:struct{publicstringtitle;publicstringauthor;publicintbook_id;structBooks{publicstringtitle;publicstringauthor;publicintbook_id;publicclass{publicstaticvoidMain(string[]{BooksBook1; Book1,类型为Book*/Books Book2,类型为Book/*book1详述Book1.title="CProgramming";Book1.author="NuhaAli";Book1.subject="CProgrammingTutorial";Book1.book_id= /*book2详述Book2.title=" Book2.author="ZaraAli";Book2.subject=" BillingTutorial";Book2.book_id= /*打印Book1信息 ine("Book1title:{0}",Book1.title); ine("Book1author:{0}",Book1.author); ine("Book1subject:{0}",Book1.subject); ine("Book1book_id:{0}",Book1.book_id);/*打印Book2信息 ine("Book2title:{0}",Book2.title); ine("Book2author:{0}",Book2.author); ine("Book2subject:{0}",Book2.subject);Console.Wriine("Book2book_id:{0}",Book2.book_id);}}}Book1title:CProgrammingBook1author:NuhaAliBook1subject:CProgrammingTutorialBook1book_id:Book2title: Book2author:ZaraAliBook2subject: BillingTutorialBook2book_id:C#BooksC#CC+中的结构不同。C#中的结构有一下特 vsusingusingstruct{privatestringtitle;privatestringauthor;privateintbook_id;publicvoidgetValues(stringt,stringa,strings,int{title=t;author=a;subject=s;book_id=}publicvoid { ine("Title:{0}",title); ine("Author:{0}",author); ine("Book_id:{0}",}publicclass{publicstaticvoidMain(string[]{BooksBook1=newBooks();/* Book1,类型为Book*/BooksBook2=newBooks(); Book2,类型为Book/*book1详述*/"NuhaAli","CProgramming /*book2详述*/ "ZaraAli", Billing /*Book1*//*Book2*/}}Title:CProgrammingAuthor:NuhaAliSubject:CProgrammingTutorialBook_id:Title: Author:ZaraAliSubject: BillingTutorialBook_id:C#枚举#enum变量enumenum{enumerationenumenumDays{Sun,Mon,tue,Wed,thu,Fri,Satusingusingnamespace{class{enumDays{Sun,Mon,tue,Wed,thu,Fri,SatstaticvoidMain(string[]{intWeekdayStart=(int)Days.Mon;intWeekdayEnd=(int)Days.Fri; ine("Friday:{0}",WeekdayEnd);}}}Monday:Monday:Friday:C#类<access<accessspecifier>class{//member<accessspecifier><datatype><accessspecifier><datatype><accessspecifier><datatype>//member<accessspecifier><returntype>{//method}<accessspecifier><returntype>{//method}<accessspecifier><returntype>{//method}}标识符<accessspecifier>指定了对类及其成员的规则。如果没有指定,则使用默认的标识符。类的默认标识符是internal,成员的默认标识符是private。<datatype><returntype>指定了返回的方法返回的数据类型。usingusingnamespace{class{publicdoublelength;//长度publicdoublebreadth;//宽度publicdoubleheight;//高度}class{staticvoidMain(string[]{BoxBox1=newBox();BoxBox2=newBox();doublevolume=0.0;Box1,类型为Box2,类型为Box1Box1.height=Box1.length=Box1.breadth=Box2Box2.height=Box2.length=Box2.breadth=Box1volumeBox1.height*Box1.length*Box1.breadth; ine("Box1的体积:{0}",volume);Box2volumeBox2.height*Box2.length*Box2.breadth;Console.Wriine("Box2的体积:{0}",volume);}}}Box1Box1Box2usingnamespace{class{privatedoublelength; //长度privatedoublebreadth;//宽度privatedoubleheight; //高度publicvoidsetLength(doublelen){length=}publicvoidsetBreadth(doublebre{breadth=}publicvoidsetHeight(doublehei{height=}publicdouble{returnlength*breadth*}}class{staticvoidMain(string[]{BoxBox1=new //Box1,类型为BoxBox2=newBox(); //Box2,类型为Boxdoublevolume; //体积Box1//Box2详述Box1volume=Box1.getVolume();Box2volume=Box2.getVolume();}}}Box1Box1Box2C#usingusingnamespace{class{privatedouble public{ }publicvoidsetLength(doublelen{length=}publicdouble{return}staticvoidMain(string[]{Lineline=new}}}默认的构造函数没有任何参数。但是如果您需要一个带有参数的构造函数可以有参数,这种构造函数叫做参数化构造函数。这种技术可以帮助您在创建对象的同时给对象赋初始值,具体请看下面实例:usingusingnamespace{class{privatedouble publicLine(doublelen)//{ ine("对象已创建,length0len);length=len;}publicvoidsetLength(doublelen{length=}publicdouble{return}staticvoidMain(string[]{Lineline=new ine("{0}", }}}对象已创建,对象已创建,lengthC#usingusingnamespace{class{privatedouble publicLine()//{ }{ }publicvoidsetLength(doublelen{length=}publicdouble{return}staticvoidMain(string[]{Lineline=new ine("{0}",}}}C#我们可以使用static关键字把类成员定义为静态的。当我们一个类成员为静态时,意味着无论有多少个类的对象被创static意味着类中只有一个该成员的实例。静态变量用于定义常量,因为它们的值可以通过直接调用类而不需要创usingusingnamespace{class{publicstaticintnum;publicvoidcount(){}publicint{return}}class{staticvoidMain(string[]{StaticVars1=newStaticVar();StaticVars2=newStaticVar();Console.Wriine("s1的变量num:{0}",s1.getNum());Console.Wriine("s2的变量num:{0}",s2.getNum());}}}s1s1num6s2的变量num:usingusingnamespace{class{publicstaticintnum;publicvoidcount(){}publicstaticint{return}}class{staticvoidMain(string[]{StaticVars=newStaticVar();}}}num:C##<acess-specifier>class{}class<derived_class>:{}usingusingnamespace{class{publicvoidsetWidth(int{width=}publicvoidsetHeight(int{height=}protectedintwidth;protectedintheight;}classRectangle:{publicint{return(width*}}class{staticvoidMain(string[]{RectangleRect=newConsole.Wriine("总面积:{0}",Rect.getArea());}}}总面积:总面积:usingusingnamespace{class{protecteddoublewidth;publicRectangle(doublel,double{width=w;}publicdouble{returnlength*}publicvoid { ine("{0 ine("宽度:{0}",width); }}//endclassRectangleclassTabletop:Rectangle{privatedoublepublicTabletop(doublel,doublew):base(l,{publicdouble{doublecost=GetArea()*70;returncost;}publicvoidDis{ ine("{0}}class{staticvoidMain(string[]{Tabletopt=newTabletop(4.5,7.5);}}}长度:长度:宽度:面积:成本:C##usingusingnamespace{class{publicvoidsetWidth(int{width=}publicvoidsetHeight(int{height=}protectedintwidth;protectedintheight;}基类publicinterface{intgetCost(int}classRectangle:Shape,{publicint{return(width*}publicintgetCost(int{returnarea*}}class{staticvoidMain(string[]{RectangleRect=newRectangle();intarea;Console.Wriine("总面积:{0}",Rect.getArea());}}}总面积:总面积:C#在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C#提供了两种技术来实现静态多态性。分别usingusingnamespace{class{voidprint(int{ ine("Printingint:{0}",i}voidprint(double{ ine("Printingfloat:{0}",}voidprint(string{ ine("Printingstring:{0}",}staticvoidMain(string[]{Printdatap=newprintprint//调用print来打印字符串 oC++");}}}PrintingPrintingint:Printingfloat:500.263Printingstring: C#允许您使用关键字 usingusingnamespace{class{ int}classRectangle:{privateintwidth;publicRectangle(inta=0,int{width=}publicoverrideintarea{ return(width*length);}}class{staticvoidMain(string[]{Rectangler=newRectangle(10,7);doublea rarea(); ine("{0}",a);}}}面积:70usingusingnamespace{class{protectedintwidth,height;publicShape(inta=0,intb=0){width=a;height=}publicvirtualint{ return0;}}classRectangle:{publicRectangle(inta=0,intb=0):base(a,{}publicoverrideintarea{ return(width*height);}}classTriangle:{publicTriangle(inta=0,intb=0):base(a,{}publicoverrideint{ return(width*height/2);}}class{publicvoidCallArea(Shape{inta= ine("{0}}class{staticvoidMain(string[]{Callerc=newRectangler=newRectangle(10,7);Trianglet=newTriangle(10,5);}}}C#C#中内置的运算符。因此,程序员也可以使用用户自定义类型的运算符。重载运算符是具有特殊名publicstaticBoxoperator+(Boxb,Box{Boxbox=newbox.length=b.length+c.length;box.breadth=b.breadth+c.breadth;box.height=b.height+c.height;returnbox;}usingusingnamespace{class{privatedoublelength;//长度privatedoublebreadth;//宽度privatedoubleheight;//高度publicdouble{returnlength*breadth*}publicvoidsetLength(doublelen{length=}publicvoidsetBreadth(doublebre{breadth=}publicvoidsetHeight(doublehei{height=}BoxpublicstaticBoxoperator+(Boxb,Box{Boxbox=newbox.length=b.length+c.length;box.breadth=b.breadth+c.breadth;box.height=b.height+c.height;returnbox;}}class{staticvoidMain(string[]{BoxBox1=newBox();//Box1,类型为BoxBoxBox2=newBox();//Box2,类型为BoxBoxBox3=newBox();//Box3,类型为Boxdoublevolume=0.0;//体积Box1Box2Box1volume=Box1.getVolume();Box2volume=Box2.getVolume();Box3=Box1+Box3volume=}}}Box1Box1Box2Box3+,-,!,~,++,-+,-,*,/,==,!=,<,>,<=,&&,+=,-=,*=,/=,=,.,?:,->,new,is,sizeof,usingnamespace{class{privatedoublelength;//长度privatedoublebreadth;//宽度privatedoubleheight;//高度publicdouble{returnlength*breadth*}publicvoidsetLength(doublelen{length=}publicvoidsetBreadth(doublebre{breadth=}publicvoidsetHeight(doublehei{height=}BoxpublicstaticBoxoperator+(Boxb,Box{Boxbox=newbox.length=b.length+c.length;box.breadth=b.breadth+c.breadth;box.height=b.height+c.height;returnbox;}publicstaticbooloperator==(Boxlhs,Box{boolstatus=if(lhs.length==rhs.length&&lhs.height==rhs.height&&lhs.breadth==rhs.breadth){status=}return}publicstaticbooloperator!=(Boxlhs,Box{boolstatus=if(lhs.length!=rhs.length||lhs.height!=||lhs.breadth!={status=}return}publicstaticbooloperator<(Boxlhs,Box{boolstatus=if(lhs.length<rhs.length&&<rhs.height&&lhs.breadth<{status=}return}publicstaticbooloperator>(Boxlhs,Box{boolstatus=if(lhs.length>rhs.length&&>rhs.height&&lhs.breadth>{status=}return}publicstaticbooloperator<=(Boxlhs,Box{boolstatus=if(lhs.length<=rhs.length&&<=rhs.height&&lhs.breadth<={status=}return}publicstaticbooloperator>=(Boxlhs,Box{boolstatus=if(lhs.length>=rhs.length&&>=rhs.height&&lhs.breadth>={status=}return}publicoverridestring{returnString.Format("({0},{1},{2})",length,breadth,}}class{staticvoidMain(string[]{BoxBox1=newBox();//Box1,类型为BoxBoxBox2=newBox();//Box2,类型为BoxBoxBox3=newBox();//Box3,类型为BoxBoxBox4=newBox();doublevolume0.0;////Box1详述//Box2详述ToString ine("Box2:{0}",Box1volume=Box1.getVolume();Box2volume=Box2.getVolume();+Box3= + ine("Box3:{0}",Box3volume=Box3.getVolume();if(Box1>Box2)Console.Wriine("Box1大于Box2");if(Box1<Box2)if(Box1>=Box2) if(Box1<=Box2)if(Box1!=Box2)Box4=Box3;if(Box3==Box4)Console.Wriine("Box3不等于}}}Box1:(6,7,Box2:(12,13,Box1Box2Box3:(18,20,Box3的体积:5400Box1不大于Box2Box1小于Box2Box1小于等于Box2Box1不等于Box2Box3等于Box4C#接口"是什么""怎么做publicinterface{doublegetAmount();}usingSystem.Linq;usingnamespace{publicinterface{doublegetAmount();}publicclassTransaction:{privatestringtCode;privatestringdate;publicTransaction(){tCode="date="";}publicTransaction(stringc,stringd,double{tCode=c;date=d;}publicdouble{return}publicvoid{Console.Wriine("Transaction:{0}",tCode);Console.Wriine("Date:{0}",date);Console.Wriine("Amount:{0}",getAmount());}}class{staticvoidMain(string[]{Transactiont1=newTransaction("001","8/10/2012",78900.00);Transactiont2=newTransaction("002","9/10/2012",451900.00);}}}Transaction:Transaction:Amount:78900Date:9/10/2012Amount:451900C#命名空间namespacenamespace{}usingSystem;namespaceusingSystem;namespace{class{publicvoid{ ine("Inside}}}namespace{class{publicvoid{ ine("Inside}}}class{staticvoidMain(string[]{first_space_clfc=newfirst_space_cl();second_space_clsc=newsecond_space_cl();}}}Insidefirst_spaceInsidefirst_spaceusing ine o o您也可以使用using命名空间指令,这样在使用的时候就不用面加上命名空间名称。该指令告诉编译器随后的代码usingSystem;usingSystem;usingfirst_space;namesp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论