c#第二天学习
这一次会主要精简一下我之前做过的笔记,以及有一些大段的东西也仍然是直接复制的,但是也会标记好引用来源。
常量 和 常量的生命
其实就是加一个const
const int a = 5
那么a就永远是5了
const 数据类型 常量名 = 值
(来自呵呵老师)
枚举
public enum 枚举名{
值1,
值2,
值3 //最后一个不用加逗号(也可以加
}
只能放在class或者namespace中
----枚举声明
枚举名 变量名 = 枚举名.值
上面的这个值是会自动提示的。
例子
Public enum Gender{
a,
b,
c
}//枚举没有public
Gender amd = Gender.a;
结构体
结构体和枚举一样,只能在class或者namespace声明
插入–帕斯卡命名法:首字母大写
public struct Person{
public string name;//这里的变量称为字段
public char _gender;//加下划线是规范性的用法
public int age;//public才可以被访问
public Gender _gender;//也可以是使用枚举类型
}
Person aaa;
调试
F11逐行调试
断点调试就点多个红点
数组
数组的初始化
1、声明
数组名 = new 数据类型[数组长度]
2、声明,初始化二合一
数据类型[] 数组名 = new 数据类型[数组长度]
new在这里指的是创建实例
int [] number = new int[5];
3、其他初始化方式
·1 int [] b = {1,2,3,4,5};减少进一步的赋值操作并且省略了声明数组长度的方式
·2 int [] c = new int[3]{1,2,3}//声明同时进行赋值
·3 int[] d = new int[]{1,2,3,4,5};
数组的相关属性
数组.Length 数组的最大长度
另一种数组 ArrayList
Null和空的区别
Null是没有分配空间
空是指分配了空间但是里面没有值
bool 的初始值是false
函数
函数如果在同一个类里面 那可以省略类名
public static void 函数名(int a,int b){
//return xxx;
}
return有两个用途
一个是返回值
一个是结束函数
重要功能 打开代码提示
alt+F12
新手要用到的读取和输出
string str = Console.ReadLine()读取输入的值
Console.WriteLine(aaa)输出括号内的内容
Console.ReadKey 读取字段
out参数和ref参数
//对于有的函数可能需要返回多个变量的时候
public static void main(string[] args){
int x=1;
int y=2;
int z=3;
Sum(out x,out y,out z);
Console,WriteLine(x,y,z);
这样子输出出来以后得到的是x y z传入以后变化而返回出来的东西
}
public static void Sum(out int a,out int b,out int c){
a=a+b+c;
b=a;
c=a;
}
上面可以看到,这样子就可以把参数再对应地传输回去
要点
1、作用
一个函数如果需要返回多个不同类型的值,则需要用到out参数
2、要点
函数外可以不为变量赋值,但是函数内一定要对变量赋值
3、语法
形参和实参都要加上关键字out
ref
ref相对于out,去掉了函数内必须赋值,其他和out基本相同
ref是将量代入方法之中。out是将方法中的量取出来。
out常用于不依赖参数值,而ref是确保调用方法时已经初始化参数值
函数重载
可以当函数的参数不一样的时候,自动匹配相对应所需的函数,而无需重新定义函数
static void plus(int a,int b){
}
static void plus(double a,double b){
}
static void plus(string a,string b){
}
static void plus(int a,int b,int c){
}
有关输出
WriteLine(“文本内容{0}{1}”,变量0,变量1);
对象 类
对象的语法
类名 对象名 = new 类名();
类的属性
1、属性的访问修饰符
public 公开 谁都可以访问
private
2、字段与属性的理解
属性的理解
a.属性其实就是外界访问私有字段的入口,属性本身不保存任何数据,在对属性赋值和读取的时候其实就是操作的对应私有字段。
首先来看一下字段和属性的代码
//字段
private string name = string.Empty;
private string aaa = "amd";
private string studentName
//属性
public string Student{
get{return studentName;}
set{studentName = value;}
}
对于属性来说,有三个关键字 get set和value
value是这个属性的具体的值
当这个属性需要被调取的时候,则会执行get函数
当这个属性被赋值的时候,则会执行set函数
所以可以在属性中自行设置set或者get所能得到的东西。
比如说
private string = “男”;
private
3.属性的作用
A.避免出现非法数据,例如一个年龄属性,正常逻辑是年龄是不可以出现负数的,如果用户对年龄进行了负数的赋值,我们通过属性的set方法加入判断逻辑,从而排除这种非法数据。
private int age;
public int Age{
get{return age;}
set{
if(value<0)//这里value是指得到的值
{
age=18;
}
else{
age = value;//如果年龄是正常的则直接赋值
}
}
}
参考资料
https://www.cnblogs.com/green-jcx/p/9023141.html
C#中的静态与非静态
C#静态方法与非静态方法比较一:
C#静态成员:
1、静态成员属于类所有,非静态成员属于类的实例所有。
2、每创建一个类的实例,都会在内存中为非静态成员新分配一块存储;
3、静态成员属于类所有,为各个类的实例所公用,无论类创建了多少实例,类的静态成员在内存中只占同一块区域。
C#静态方法与非静态方法比较二:
https://blog.csdn.net/zxcvbnm32123/article/details/9429269
C#静态方法
1、C#静态方法属于类所有,类实例化前即可使用。
2、非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。
3、因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存,
这样,C#静态方法调用时无法判断非静态变量使用的内存地址。所以无法使用。而静态变量的地址对类来说是固定的,故可以使用。
C#静态方法与非静态方法比较三:
C#静态方法是一种特殊的成员方法 它不属于类的某一个具体的实例,而是属于类本身。所以对静态方法不需要首先创建一个类的实例,而是采用类名.静态方法的格式 。
1.static方法是类中的一个成员方法,属于整个类,即不用创建任何对象也可以直接调用! static内部只能出现static变量和其他static方法!而且static方法中还不能使用this…等关键字…因为它是属于整个类!
2.静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁。
3.静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存.
4.C#中的方法有两种:实例方法,静态方法.
————————————————
版权声明:本文为CSDN博主「我要有出息」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zxcvbnm32123/article/details/9429269
构造函数
构造函数的目的实际上就是为了传递相应的变量,来初始化变量
给对象的每个属性依此赋值
构造函数是一个特殊的方法
甚至不能加入void
public 函数名(){}
注意:
构造函数没有返回值,void也不能写
构造函数的函数名称要和类的名称相同
1、创建对象的时候会执行构造函数
2、构造函数可以有重载(媒人手里有很多的选择)
3、类中会自动创建一个无参数的构造函数,若自己写了一个构造函数以后,这个无参数的构造函数则会消失。也就是说构造函数本身就会存在一个默认的啥都没的。
C#中的this
1、代表当前的类的对象
析构函数
析构函数
析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
重点:以C++语言为例,析构函数名也应与类名相同,只是在函数名前面加一个波浪符,例如stud( ),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载。如果用户没有编写析构函数,编译系统会自动生成一个缺省的析构函数,它也不进行任何操作。所以许多简单的类中没有用显式的析构函数。
来源:https://www.cnblogs.com/yzl050819/p/6245463.html
引用命名空间
using xxx;
常用字符串
字符串常用方法
string str ="";
string[] strArray = str.Split(‘截取字符’); //按字符将字符串拆分为数组
str = str.Replace(“n”,“m”);//将字符串n替换为m
str = str.Remove(i,length);//删除字符串下标i,长度为8下标从0开始
str = str.Substring(n); //截取字符串,下标充0开始,包括n
bool bl = string.IsNullOrEmpty(str)//判断str是否为"“和nul,返回true为”"或者null
bool bl = str.Contains(“n”); //判断字符串str里面是否包含"n",返回true包含,false不包含
bool bl = str.Equals(str1);//判断字符串str和字符串str1是否完全一样(区分大小写) 返回true完全一样
int index = str.IndexOf(“n”);
int index = str.LastIndexOf(“n”);
//IndexOf 和 LastIndexOf 判断字符串第一次出现(IndexOf)和最后一次出现(LastIndexOf)的位置,如果没有出现过则返回值为-1
string s=str.Insert(index,"")//在字符串的index位置上插入字符,原来的字符依次后移,变成一个新的字符串
char[] s=str.ToCharArray();//ToCharArray将字符串转化为字符数组(.ToCharArray())
str = str.Trim();// 去掉前后两边的空格
str=str.ToUpper();//转换为大写
str=str.ToLower();//转换为小写
//ToUpper(转换为大写)和ToLower(转换为小写)
堆栈关系介绍
堆栈关系就好比运行内存和存储内存的区别
堆->储存内存
栈->运行内存
### 值类型和引用类型
值类型直接存储在栈当中,一般是一些可以用于计算机直接运算的值,比如整数,布尔值等。
值类型的有:int double bool char struct enum
引用类型的有:string 数组
而引用类型的数据一般是储存在堆当中,比如string a = “and”;
这个地方的字符串数据是存储在对应的一个地址中,而变量a实际上只是存储了这个地址,a存储的数据在栈中。当我们需要a所对应的这个字符串数据的时候,实际上是通过找a所对应的这个地址里面的内容。
当改变引用类型的变量所对应的字符串的时候,原先储存的字符串并没有被马上销毁,而是新开一块空间来存放新的数据,但是旧的数据可以被GC回收机制回收。