您的位置:首页 > 编程语言 > C#

C#个人总结2——类和对象

2016-06-29 04:24 232 查看
类和结构都是创建对象的模板。类是存储在堆上的引用类型,结构是存储在栈上的值类型。

类中的数据和函数称为类成员。数据成员包含字段、常量和事件。函数成员包括方法、属性、构造函数、终结器、运算符以及索引器。

方法

方法中的参数可以是值传递也可以是引用传递。值类型数据是值传递,引用类型数据是引用传递。传递引用的效率更高,但是方法内操作的就是本体对象,而值类型数据在方法内只是一个副本,因此方法内的操作不会影响值类型数据。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必须有一个具有属性的访问级别。

构造方法

声明基本构造函数的语法就是声明一个与包含的类同名的方法, 但该方法没有返回类型。如果没有添加自定义的构造函数,类会自动添加一个无参数的构造函数,如果添加了自定义构造函数,类就不会在自动添加了。

静态构造函数不依赖于对象的创建,它会在创建类后的某个时刻调用(一般在代码引用类的成员之前),但是不确定,因此不应该把某个特定时刻(比如加载程序集)需要执行的代码放在静态构造函数中,也不能预计不同类的静态构造函数按什么顺序执行(静态构造函数中的代码不应依赖于其它类中静态构造函数执行情况),但是可以确保静态构造函数只执行一次。静态构造函数中只能处理类的静态字段或属性。因为只由自己本身调用,所以访问修饰符没有意义,参数列表也没有意义,一个类也只能有一个静态构造函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: