C#类的修饰符
- Public:公有的, 是类型和类型成员的访问修饰符。对其访问不受任何限制。
- Private:私有的,私有成员只有在声明它们的类和结构体中才是可访问的。
- Protected:保护成员,该类内部和继承类中可以访问。
- internal:内部访问,同一个程序集中的所有类都可以访问,一般都是限于本项目内。
- Protected internal:受内部保护的,只限于本项目或是子类访问,其他不能访问。
一个类[包括接口,结构体,枚举,委托]上可以使用的访问修饰符有:public, internal默认的值是internal。
内部成员的默认级别
- class: private enum: public
- interface(接口): public struct: private
对象与类知识练习代码:
phone类文件,phone.cs
public const string PhoneType = "GSM"; // 声明常量,隐式静态
public static string emergency_Call = "119";
private string phoneNumber; // 定义私有字段表示电话号码
public string PhoneNumber // 定义公有属性,设置和获取phoneNumber的值
{
get { return phoneNumber; }
set { phoneNumber = value; }
}
public void Dial() // 无参数方法成员,表示电话具有拨打功能
{
Console.WriteLine("您正在拨打电话!");
}
public void DialNumber(string number) // 有参数方法成员,表示拨打具体电话号码
{
Console.WriteLine("您正在拨打" + number);
}
public static void EmergencyCall() // 静态方法EmergencyCall
{
Console.WriteLine("您正在拨打急救电话119!");
}
main函数
Phone.EmergencyCall(); // 您正在拨打急救电话119!
Console.WriteLine(Phone.emergency_Call); // 119
Phone objPhone = new Phone
{
PhoneNumber = "123456"
};
Console.WriteLine("电话号码是" + objPhone.PhoneNumber); // 电话号码是123456
objPhone.Dial(); // 您正在拨打电话!
objPhone.DialNumber("404404"); // 您正在拨打404404
Console.ReadKey();
- 实例中定义了常量PhoneType、静态字段emergency_Call和静态方法EmergencyCall,对这些静态成员的使用方法是“类名.静态成员名”,不需要实例化;
- 类中还定义了如下实例成员:phoneNumber、有参数的Dial方法和无参数的Dial方法,使用的时候先要创建对象,以“对象名.实例成员名”的方式调用。
面向对象思想理解(OOP-Object Oriented Programming)
- 万物皆为对象
- 程序是对象的集合,通过发送消息完成程序工作
- 每一个对象在内存中都有一个唯一的地址
- 对象是类的实例,类是对象的模板。
new 一个对象
Phone objPhone = new Phone()
{
PhoneNumber = "12345"
}
Phone objPhone = new Phone
{
PhoneNumber = "12345"
}
加括号与不加的区别
(1)加括号
-
若括号为空,即无实参项,那么理解为调用默认构造函数;
-
若括号非空,即有实参项,可以理解为调用重载构造函数,或复合默认构造函数。
(2)不加括号
调用默认构造函数,或复合默认构造函数。
默认构造函数 与 复合默认构造函数的区别
-
默认构造函数:编译器会为每一个类默认提供一个构造函数,称之为默认构造函数。默认构造函数一般参数为空。
-
复合默认构造函数:一个由用户自定义的所有形式参数都赋有默认值的构造函数,称之为复合默认构造函数。
两者联系:
-
一个类中,若一旦有一个用户自定义构造函数,那么由编译器提供的默认构造函数就不再存在。用户自定义的构造函数为默认构造函数的重载版。
-
默认构造函数不复存在时,用户必须为这个类再自定义一个复合默认构造函数(选所有自定义构造函数其中之一,把形式参数均赋默认值即可)。
不论自定义构造函数(即构造函数的重载版)有多少个,只允许有一个复合默认构造函数。