c#划水快速入门 2

这篇博客是C#初学者的第二天学习笔记,涵盖了常量、枚举、结构体、调试、数组、Null和空的区别、函数、类的属性、静态与非静态、构造函数、析构函数等多个基础概念。详细解释了如何使用这些概念,并提供了实例代码,适合入门者学习。
摘要由CSDN通过智能技术生成

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回收机制回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值