一、.net框架(.Net Framework)
在.net平台上可以编写出下面类型的应用程序:
- Windows应用程序
- Web应用程序
Web服务
2、.net框架是多平台的应用程序,框架的设计方式使它使用于下列语言:C#、C++、Visual Basic、Jscript、COBOL,这些语言之间可以彼此交互,当然java语言也能与C#的交互
二、类与方法
类一般包含了多个方法,方法定义了类的行为。
以下几点值得注意:
- C#大小写敏感;
- 所有程序和表达式必须是分号(;)结尾;
- 程序执行从Main方法开始;
- 与java不同的是,文件名可以不同于类名(ps:java中的public修饰的类要和文件名一样)
在面对对象的程序设计方法中,程序由各种相互交互的对象组成。相同种类的对象通常具有相同的类型,或者说,是在相同的class中。
eg,Rectangle(矩形)类实现demo:
public class Rectangle
{
double length;
double width;
public void acceptDetail()
{
length = 4.5;
width = 3.5;
}
public double getArea()
{
return length * width;
}
public void disPlay()
{
Console.WriteLine("length is {0}" , length);
Console.WriteLine("width is {0}", width);
Console.WriteLine("Area is {0}", getArea());
}
class Test
{
static void Main(string[] args)
{
Rectangle rectangle = new Rectangle();
rectangle.acceptDetail();
rectangle.disPlay();
Console.ReadKey();
}
}
运行结果:
注意:C#中的占位符需要一一对应
Console.WriteLine("A:{1},B:{0}", 66, 88);
Console.ReadKey();
运行结果:
ps:类的实例化就是new对象,除了这个以外还有工厂模式等使用create()方法来造对象;
(1)、标识符:
用来标识类、变量、函数或任何其他用户定义的项目,在C#中,类的命名规则为:
- 标识符必须以字母、下划线或@开头,后面可以跟一系列的字母、数字(0-9)、下划线(_)、@;
- 标识符中第一个字符不能是数字;
- 标识符必须不能包含任何嵌入的空格或符号,比如?-+!#%&……。;:“‘/*;
- 标识符不能是C#关键字,除非它有一个 @前缀,eg:@if是有效的标识符,但是if不是;
- 标识符必须区分大小写;
不能与C#类库名称相同
**
三、C#关键字
**
在C#中,有些关键字在代码上下文有特殊的意义,如get和set,这些被称为上下文关键字(contextual keywords).
下表列出了C#的保留关键字(Reserved Keywords)和上下文关键字 (contextual Keywords)
**
四、C#中的//和///注释的区别
**
C#引入了新的XML注释,即///;
{1}、//不会被编译,而///会被编译,所以使用了///会减慢编译速度(但不会影响执行速度)
{2}、使用///会在其他类中调用代码时提供智能感知(通常在Form,Designer.cs创举哦会自动生成///注释的程序)
{3}、以///方式修类、属性、方法加上注释之后,当你在其他地方使用以这种方式加上的类,属性,方法等的时候,提示框会把你写的注释显示出来,让你更加明白你要使用的功能的作用。
C#引入新的xml注释,即哦我吗在某个函数前起一行,输入///,VS.Net会自动增加XML格式的注释,这里整理一下看用的XML注释。XML注释分为一级注释(Primary Tags)和二级注释(Secondary Tags),前者可以单独存在,后者必须包含在一级注释内部。
一级注释
- 对共有类型的类、方法、属性或字段进行注释;
- 主要用于对属性的注释,表示属性的制的含义,可以配合使用;
- 对类型进行描述,功能类似,据说建议使用 ;
- 用于对方法的参数进行说明,格式:value;
- 用于定义方法的返回值,对于一个方法,输入///后,会自动添加、、;
- 定义可能抛出的异常,格式:;
- 用于给出如何使用某而方法、属性或者字段的使用方法;
- 涉及方法的访问许可;
- 用于参考某个其他的东西,也可以通过cref设置属性;
用于指示外部的XML注释;
二级注释or
主要用于加入代码段;
- 的作用类似于HTML中的
标记符,就是分段;
- 用于引用某个参数;
- 作用类似于,可以指示其他的方法;
- 用于生成一个列表;
- 还可以自定义XML标签
2》、让C#智能注释多行显示
在C#智能指示时,常希望它能在开发时显示为换行,使得提示更加友好!实际上很简单,只需要在类似、、等标记中添加标记即可。
C#数据类型
在C#中,变量分为以下几种类型:
- 值类型(Value types)
- 引用类型(Reference types)
- 指针类型(Pointer types)
值类型
值类型变量可以直接分配给一个值。它们是从类System.ValueType中派生的。
值类型直接包含数据,比如int、char、float
下表列出了可用的值类型:
若需要得到一耳光类型或者变量在特定平台上的准确尺寸,可以使用sizeof方法,表达式sizeof(type)产生以字节为单位存储对象或类型的存储尺寸,eg:获取任何机器上的int类型的存储尺寸
static void Main(string[] args)
{
Console.WriteLine("size of int is:{0}", sizeof(int));
Console.ReadKey();
}
运行结果为:
引用类型(Reference types)
引用类型不包含存储在变量中的实际数据,但包含对变量的引用;即指的是内存地址,引用类型可以指向一个内存位置,如果内存位置的数据由一个变量改变的,其他变量会自动反映这种值的变化。内置的 引用类型有:object、dynamic 和 string
1、对象(object)类型
object类型是通用类型系统(Common Type System-CTS)中所有数据类型的终极基类。Object是System.Object类的别名。所以Object类型可以被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是在分配值之前,需要先进行类型转换。
当一个值类型转换为对象类型时,被称为装箱;另一方面,当一个对象类型转换为值类型时,被称为拆箱。eg:
object obj;
obj = 100;//这是装箱
2、动态(Dynamic)类型
可以存储任何类型的值在动态数据类型变量中。这些变量的类型检查是在运行时发生的。
声明动态类型的语法:
//dynamic < variable_name >= value;
dynamic d = 20;
动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查时在运行时发生的。
3、字符串(String)类型
String类型允许给变量分配任何字符串值。String类型是System.String 类的别名。它是从Object类型派生的。String类型的值可以通过两种形式进行分配:引号和@引号。eg:
String str = "baidu.com";
一个@引号字符串:
@"baidu.com"
C# String字符串前面可以加@(称为“逐字字符串”)将转义字符(\)当成普通字符对待,eg
String daStr = @"C:\Windows";
等价于:
String daStr = "C:\\Windows";
@字符串中可以任意换行,换行符及缩进空格都计算在字符串长度之内
String str = @"<script type=""text/javascript"">
<!--
-->
</script >";
用户自定义类型有:class、interface或delegate.
指针类型(Pointer types)
指针类型变量存储另一种类型的内存地址。C#中的指针与C或C++中的指针有相同的功能。
声明指针类型的语法:
type* indentifier;
eg:
char* cptr;
int* iptr;
笔记:
一、关于装箱和拆箱
- 装箱:值类型转换为对象类型,eg:
int val = 8;
object obj = val;//整型转换为独享类型(装箱)
拆箱:之前由值类型转换而来的对象类型再转回值类型,eg:
int val = 66;
object obj = val;//装箱
int nval = (int)obj;//拆箱
注意:只有装过箱的数据才能拆箱
装箱需要耗费人力和工时(即消耗cpu和内存)同理,拆箱也需要耗费人力和工时。
二、obj(引用)与int(值类型)之间的关系
int val = 55;
object obj = val;
obj = 52;
Console.WriteLine("val的值为:{0}", val);
Console.WriteLine("obj的值为:{0}",obj);
Console.ReadKey();
运行结果:
可以看出,引用类型只是复制了值类型的值出啦,然后对其进行操作,而不会改变原来的值类型的值。
三、C#中的string 和String的区别
stringshi C#中的类,String是.net Framework的类(在C#IDE中不会显示蓝色)c#string映射为.net Framework的String,如果用string,编译器会把它变异成String,so直接用String,会让编译器少做一点点工作。
如果使用C#,建议使用string,比较符合规范,string始终代表System.String(1.x)或::System.Strig(2.0),String 只有在前面有using System;的时候并且当前命名空间中没有名为String的类型(class,struct,delegate,enum)的时候才代表System.String string 是关键字,string不是,也就是说string不能作为类、结构、枚举、字段、变量、方法、属性的名称,而String可以。
String 是CLR的类型名称(也算关键字),而string是C#的关键字。string在编译的时候C#编译器会默认将其转换为String。在VS中表现的颜色不同:String是绿色,string是蓝色。
四、值类型特点:
- 不能从值类型派生新类型,但可以结构实现接口。
- 值类型不能包含null值;
- 每个值类型都具有一个初始化该类型的默认值的隐式默认构造函数;
每一个值类型都有一个独立的内存区域保存自己的值,调用它的时候调用的是它的值,而引用类型调用的是内存中的地址,比如定义引用类型a1=10,这时候在内存中保存的是10,当把a1赋给a2的时候,他们两个应用的是同一个内存空间,a2的值会保存为a1的值,当把a2改为20,因为a1和a2指向的是同一块内存空间,所以,a1也变成了20,这是引用类型;
值类型是:当a1赋值给a2时,会为a2重新分配一块新的内存空间,保存a1的值(复制一份给a2),当修改a2为20的时候,会在a2的空间中保存20,和a1并无什么关系。