C#和.NET基础知识——学习笔记(三)
面向对象的概念
1. 类和对象
类是模子,确定对象将会拥有的特征(属性)和行为(方法)。
类是对象的类型,类是抽象的概念。
对象可以叫做类的实例(Instance)。
语法:
[访问修饰符] class 类名
{
成员
……
}
访问修饰符
C#中有4个访问修饰符:public,internal,private,protected
public:可以在任何地方被访问;
internal:只能在本项目中被访问;
private:只能在本类中被访问;
protected:只能在本类和子类中被访问。
对于一个类来说,在声明变量或函数时不指定访问权限时,默认采用private访问权限。
在类这个级别,不写访问修饰符时,默认为internal。
在Java和C++中类的默认访问权限是如何设置的?变量名和方法名又是如何设置它们的可见性呢?
2. 属性
属性定义:该对象包含获取(get)与设置(set)两个基本操作的方法。该方法旨在保护私有属性,并确保对该属性的读取与赋值操作均满足规范要求。例如,在这种情况下,请考虑以下实现细节以确保系统的安全性与稳定性。
private int age;
public int Age
{
set
{
return age;
}
get
{
//这里有个关键字value,value中就存储着用户赋的那个值
if(value >= 0)
{
age = value;
}
else
{
age = 0;
}
}
}
属性可分为:读写、只读、只写。
读写属性:具有get/set方法的属性叫做读写属性;
只读属性:只有get方法的属性,这个属性只能读取,不能写入;
只写属性:该set类型的属性仅支持赋值操作而无法读取该属性值(这种特性在实际应用中较为少见)
允许外部访问的变量一定要声明为属性。
3. 构造方法
当实例化一个类时,系统会自动对这个类的属性进行初始化:
数字类型初始化为0/0.0;
string类型初始化为null;
char类型初始化为\0,即ASIIC码的0;
构造方法的好处:
①对多个属性进行赋值时,不需要重复的写实例名;
②可以保证用户在new一个对象时必须对某一个属性进行赋值;
③在创建对象时,对只读属性进行赋值;
构造方法用来创建对象,并且可以在构造函数中对对象进行初始化。
创建方法是一种特殊的实现方式;其名称与所属类的名称一致;且不返回任何值;即使没有参数也可以省略。
构造函数允许带有自定义参数。
当使用new关键字创建对象时,默认会传递给该对象的一个或多个预设属性值(即传递给该对象的一个或多个预设属性值)。
若未显式定义,则系统会自动生成一个无需参数的默认构造函数。
若已知该特定类型的构建函数存在,则无需依赖自动生成的标准版本。
若需自定义一个不带任何参数的构建函数,则必须手动编写相应的代码。
构建函数支持重载功能,在不同情况下可接收不同数量或类型的数据。
4. C#的类图和通用类图
C#的类图如下所示

5. 析构函数(~)
不能再结构中定义析构函数,只能对类使用析构函数。
一个类只能有一个析构函数。
无法继承或重载析构函数。
无法调用析构函数,它们是被自动调用的。
析构函数既没有修饰符,也没有参数。
C#有垃圾回收机制,所以不用再写析构函数。
6. 命名空间
namespace:用于解决类重名问题,可以看做“类的文件夹”。
如果代码和被使用的类在一个namespace则不需要using。
在不同命名空间下的类调用分为两种方式:一种是完整的方式书写"命名空间.类名";另一种是通过引入"using"语句来引用命名空间后再进行调用
7. string
string可以看做是char的只读数组。
C#中的字符串具有不可变性的核心属性。声明后的字符串无法进行修改。因此,在程序中只能通过索引获取字符信息,并无法直接修改特定字符的位置。
为了更改char变量,在C#中必须生成一个新的字符数组,并对该字符数组执行相应的操作以完成修改需求。具体来说,在需要对char变量进行更改时,请按照以下步骤操作:首先利用s.ToCharArray()方法获取当前字符型字符串对应的字符数组;然后对该字符数组执行必要的修改;最后通过new(string[])构造函数生成新的字符型字符串以完成赋值操作即可达成目标。值得注意的是,在完成上述操作后将不再影响原始字符型变量的内容
