C#个人总结2——类和对象
2016-06-29 04:24
232 查看
类和结构都是创建对象的模板。类是存储在堆上的引用类型,结构是存储在栈上的值类型。
类中的数据和函数称为类成员。数据成员包含字段、常量和事件。函数成员包括方法、属性、构造函数、终结器、运算符以及索引器。
out关键字功能几乎和ref相同,除了在传递给方法前可以不用初始化。示例如下:
参数一般需要按照顺序传送给方法,命名参数允许按任意顺序传递。比如以下方法:
可选参数是一种很方便实用的功能,但是它必须放在参数列表的最后,并且必须提供默认值,示例:
方法可以进行重载,也就是方法名相同,方法签名不同(参数个数或类型不同)。
静态构造函数不依赖于对象的创建,它会在创建类后的某个时刻调用(一般在代码引用类的成员之前),但是不确定,因此不应该把某个特定时刻(比如加载程序集)需要执行的代码放在静态构造函数中,也不能预计不同类的静态构造函数按什么顺序执行(静态构造函数中的代码不应依赖于其它类中静态构造函数执行情况),但是可以确保静态构造函数只执行一次。静态构造函数中只能处理类的静态字段或属性。因为只由自己本身调用,所以访问修饰符没有意义,参数列表也没有意义,一个类也只能有一个静态构造函数。
类中的数据和函数称为类成员。数据成员包含字段、常量和事件。函数成员包括方法、属性、构造函数、终结器、运算符以及索引器。
方法
方法中的参数可以是值传递也可以是引用传递。值类型数据是值传递,引用类型数据是引用传递。传递引用的效率更高,但是方法内操作的就是本体对象,而值类型数据在方法内只是一个副本,因此方法内的操作不会影响值类型数据。ref关键字强制参数将引用传递给方法,示例如下:public class Program { /// /// ref关键字测试类 /// public static void TestRef() { Car myCar = new Car(); //创建一个新对象 string number = "0"; //将number赋值为0 string type = String.Empty; //将type赋值为空 myCar.GetCarNum(ref number, ref type); //使用ref关键字 Console.WriteLine(number); //"1001" Console.WriteLine(type); //"Car" Console.ReadKey(); //等待用户按键 } } class Car { /// /// 声明字符串变量 /// string carNumber = "1001"; string carType = "Car"; /// /// 说明:关键字ref,方法中传递对象引用 /// /// /// /// num public void GetCarNum(ref string num, ref string type) //使用ref关键字 { num = carNumber; //获取私有变量的值 type = carType; //获取私有变量的值 return; } }
out关键字功能几乎和ref相同,除了在传递给方法前可以不用初始化。示例如下:
public class Program { /// /// out关键字测试类 /// public static void TestOut() { int value; string str1, str2; outMethod(out value, out str1, out str2); // value is now 44 // str1 is now "I've been returned" // str2 is (still) null; } /// /// 说明:关键字out,通过方法返回多个参数 /// 调用方法时可以不初始化,但是方法内一定要初始化 /// /// /// /// public static void outMethod(out int i, out string s1, out string s2) { i = 44; s1 = "I've been returned"; s2 = null; } }
参数一般需要按照顺序传送给方法,命名参数允许按任意顺序传递。比如以下方法:
string fullName(string firstName, string lastName) { return firstName + " " + lastName; }fullName("James", "Green") 和 fullName(lastName: "Green", firstName: "James")返回的结果是一样的。
可选参数是一种很方便实用的功能,但是它必须放在参数列表的最后,并且必须提供默认值,示例:
int add(int a, int b = 10) { return a + b; }调用该方法时可以只传递a参数,如:add(6),那么在add方法中,b就取默认值10,若传递了b参数,方法中b就取传递的值。
方法可以进行重载,也就是方法名相同,方法签名不同(参数个数或类型不同)。
属性
属性是一个方法或一对方法,在客户端代码看来,它是一个字段。在属性定义中一般包含一个get方法和set方法,没有get就是只写属性,没有set就是只读属性。get和set必须有一个具有属性的访问级别。构造方法
声明基本构造函数的语法就是声明一个与包含的类同名的方法, 但该方法没有返回类型。如果没有添加自定义的构造函数,类会自动添加一个无参数的构造函数,如果添加了自定义构造函数,类就不会在自动添加了。静态构造函数不依赖于对象的创建,它会在创建类后的某个时刻调用(一般在代码引用类的成员之前),但是不确定,因此不应该把某个特定时刻(比如加载程序集)需要执行的代码放在静态构造函数中,也不能预计不同类的静态构造函数按什么顺序执行(静态构造函数中的代码不应依赖于其它类中静态构造函数执行情况),但是可以确保静态构造函数只执行一次。静态构造函数中只能处理类的静态字段或属性。因为只由自己本身调用,所以访问修饰符没有意义,参数列表也没有意义,一个类也只能有一个静态构造函数。
相关文章推荐
- C#使用tesseract3.02识别验证码模拟登录
- c#中Invoke使用方法(线程间操作无效: 从不是创建控件的线程访问它。那么创建它的线程是哪个线程?)
- C#.NET 定时器类及使用方法
- LCS算法找出两个字符串最长公共子串(C#实现)
- c# PictureBox 的图像上使用鼠标画矩形框
- 单例(C#版)
- C#执行存储过程
- C# 互操作性入门系列(三):平台调用中的数据封送处理
- C#学习心得与自我反思
- C#之结构Struct
- C#实现上传图片
- 定义C#的类
- SpriteBatch and renderstates in XNA Game Studio 4.0
- 【C#】 RSA 数字签名
- ElapsedRealTime and TotalRealTime in XNA Game Studio 4.0
- C#文件流写入方法
- XNB file format documentation
- Reach vs. HiDef
- 【C#】RSA 密钥生成 加密 解密
- C# 布局 Anchor&Dock