- C#语言基础
- 枚举
- 简单枚举
- 枚举的多选
- 数据类型转换
- 类和对象
- 类和对象
- 创建类
- 创建对象
- 成员变量
- 值类型与引用类型
- 字段:存储数据
- 构造函数
- this关键字
- 类数组
- 类结构
- 列举某种数据的所有取值
- 作用:增强代码的可读性,限定取值
- 语法:enum 名字 {值1,值2,值3,值4}
- 枚举元素默认为int类型,准许使用的枚举类型有byte、sbyte、short、ushort、int、uint、long或者ulong
- 每个枚举元素都是有枚举值的。默认情况下,第一个枚举的值为0,后面每个枚举的值一次递增1,可以修改值,后面枚举数的值依次递增
选择多个枚举值
使用运算符**|**(按位或运算),例如:(Info.io | Info.stream)
两个对应的二进制位中有一个为1,则结果为1
条件:
- 任意多个枚举值做|(按位或)运算的结果不能与其他枚举值相同
- 定义枚举时,使用[Flags]特性修饰(增强代码可读性,标记可多选)
判断标志枚举是否包含指定枚举值
使用运算符**&**(按位与)
00000011 & 00000001 ==》00000001
//int ==> Enum PersonStyle style01 = (PersonStyle)2; //Enum ==> int int enumNumber = (int)(PersonStyle.Beauty | PersonStyle.Handsome); //string ==> Enum PersonStyle style02 = (PersonStyle)Enum.Parse(typeof(PersonStyle), "beauty"); //Enum ==> string string strEnum = PersonStyle.Handsome.ToString();类和对象 类和对象
- 面向对象:一种软件开发的思想,指导程序员如何分析、解决问题
- 类是一个抽象概念,即为生活中的“类别”
- 对象是类的具体实例,即归属于某个类别的“个体”
- 名词类型的共性,作为数据成员
- 动词类型的共性,作为方法成员
类的具体形式:
namespace day07练习
{
///
/// 用户类
///
class User
{
//字段
//属性
//构造函数
//方法
}
}
创建类
语法:
访问级别 class 类名
{
类成员
}
C#中类的所有首字母大写,和方法一样,变量的第一个首字母小写
通常每个类都在一个独立的C#源文件中
创建新的类意味着在当前的项目中产生了一种新的数据类型
类的本质是引用类型,枚举的本质是值类型
创建对象语法:
类名 引用名;
引用名 = new 构造函数(参数列表);
可以通过在类中创建的方法,来对对象做各种操作
当对象被方法赋值时,是引用类型,当把它赋值给另外一个同类型对象时,赋的是引用
static void Main(String[] args)
{
//声明dog类型的引用
dog dog01 = new dog();
//指向dog类型的对象(实例化dog类型对象)
dog01.SetName("ruben");
Console.WriteLine(dog01.GetName());
dog01.SetAge(1);
Console.WriteLine(dog01.GetAge());
dog dog02 = dog01;
dog02.SetName("wendy");
Console.WriteLine(dog01.GetName());
}
成员变量
成员变量:定义在类中方法外的变量
特点:
- 具有默认值
- 所在类被实例化后,存在堆中,对象被回收时,成员变量从堆中清除
- 可以与局部变量重名
在方法中想要使用成员变量,就需要使用this
值类型与引用类型- 值类型:声明在堆中,数据存储在栈中
- 引用类型:声明在堆中,数据存储在堆的另一块空间
例如:
private int name
属性:保护字段
public string Name{
//读取时保护
get
{return name;}
//写入时保护 value:要设置的数据
set
{this.name = value;}
}
本质就是对字段的读取与写入方法
可以只使用get或者set,变成只读或只写属性
通常一个公有属性和一个私有字段对应
属性只是外壳,实际上操作的私有字段
构造函数:提供了创建对象的方式,常常用于初始化类的数据成员
特点:没有返回值 与类同名 创建对象时自动调用(不能手动调用)
如果不希望在类的外部被创建对象,就将构造函数私有化
private Dog(){}
一个类若没有构造函数,那么编译器会自动提供一个无参数构造函数;一个类若具有构造函数,那么编译器不会提供无参数构造函数
public(访问级别) Dog(类名)()
{
}
构造函数如果为字段赋值,属性中的代码块不会执行
public Dog(string name):this()
{
this.name = name;
}
public Dog(string name,int age):this(name)
{
this.age = age;
}
可以调用:后面对应的构造函数,例如这里调用的就是无参数的那个
this关键字- 表示当前对象的引用
- 访问当前类成员时,使用this关键字,可以提高代码的可读性;在没有歧义的情况下,也可以省略
Dog[] dogArray = new Dog[5];
dogArray[0] = dog01;
dogArray[1] = dog02;
dogArray[2] = new Dog("03".10);
dogArray[3] = null;
类结构
//数组初始化必须指定大小
//读写元素 必须通过索引
用户集合类 UserList
{
public User[] data; // 真正存储用户的字段
public UserList():this[8]
{ }
public UserList(int capacity){
data = new User[capacity];
}
public void Add(User value){
int i = 0;
while(data[i] != null){
i++;
if(i == data.length){
User[] copy = new User[data.length+1];
for(int j = 0;j
copy[j] = data[j];
}
copy[j+1] = value;
data = copy;
return;
}
}
data[i] = value;
return;
}
public User GetElements(int index)
{
return data[index];
}
}
使用:
UserList list = new UserList(10);
list.Add(u1);
list.Add(u2);
list.Add(u3);
list.Add(u4);
for(int i = 0;i
User user = list.GetElement(i);
user.PrintUser();
}



