爱建站小程序特点,淄博网站制作设计,地下城钓鱼网站如何做,江西专业网站建设定制 梳理了一些本人在学习C#时的一些生疏点#xff0c;同时也加深自己的印象。 堆栈
堆用来存储程序运行时产生的变量#xff0c;当程序结束时释放#xff1b;
栈用来存储程序运行时#xff0c;调用方法产生的临时变量#xff0c;方法运行完成后就会释放… 梳理了一些本人在学习C#时的一些生疏点同时也加深自己的印象。 堆栈
堆用来存储程序运行时产生的变量当程序结束时释放
栈用来存储程序运行时调用方法产生的临时变量方法运行完成后就会释放掉 引用类型值类型
值类型 以下代码在将a的值存储进b时是将a里面的数值复制放入b中。
//值类型
int a 18;
int b a;
原来a的值改变后不影响b。 引用类型
引用类型有点不一样观察下面的代码将变量xiaoming赋值给xiaogang后对小明的Name属性修改我们查看输出结果发现xiaogang的Name属性也被修改了。
namespace ConsoleApp1
{public class Program{static void Main(string[] args){//创建一个学生对象Student xiaoming new();//小明的年龄是18xiaoming.Age 18;//名字叫王小明xiaoming.Name 王小明;//这时把小明的信息赋值给小刚Student xiaogang xiaoming;//过了一年小明长大了叫‘王大明’xiaoming.Name 王大明;//这个时候查看小刚的名字Console.Write(xiaogang.Name);//结果打印王大明}}public class Student{/// summary/// 学生的年龄/// /summarypublic int Age;/// summary/// 学生的名字/// /summarypublic string Name { get; set; }}
} 之所以叫引用类型其实xiaoming和xiaogang都是引用同一块内存地址
同样如果我们对xiaogang的Name进行修改再查看xiaoming的Name属性也会变成对xiaogang的更改。 继承
观察下方代码继承父类后子类也将拥有父类的变量、方法。
前提是父类在创建时不是私有变量或方法。 class Father{//需要声明public子类才能调用public int BigHouse 10;double Dollars 1000000;string Skill 搬砖熬夜;}/// summary/// 继承父类让父类变成共同财产/// /summaryclass Son:Father{public void Ability(){Console.WriteLine($我生下来就有{BigHouse}套房子);}} 接口
观察下方代码首先声明了接口回家方式
每个人的回家方式是不同的就要到各自的类中去实现比如小明开车回家小刚开武装直升机回家等类似的接口
比如游戏中的怪物都会攻击但不同的怪物有不同的攻击方式就要各自去实现。
继承接口在标准化编程中可以更稳妥防止一些功能未实现导致的Bug。 /// summary/// 声明回家的方式/// /summaryinterface GoHome{/// summary/// 交通工具接口但每个人的交通工具不一样/// /summary/// param nameVehicle_Type/parampublic void Vehicle(string Vehicle_Type);}class xiaoming : GoHome{/// summary/// xiaoming的回家方式/// /summary/// param nameVehicle_Type/paramvoid GoHome.Vehicle(string Vehicle_Type){Console.WriteLine($xiaoming今天开{Vehicle_Type}回家);}public int Age 18;}class xiaogang : GoHome{/// summary/// xiaogang的回家方式/// /summary/// param nameVehicle_Type/paramvoid GoHome.Vehicle(string Vehicle_Type){Console.WriteLine(呼叫管家);Console.WriteLine($管家开着xiaogang的私人{Vehicle_Type}接少爷回家);}} 多态
方法的重载
像我们使用的Console.Writeline之所以可以传入多种不同类型、不同长度的形参是因为将同一方法写了几十种处理方式。
观察下方代码发现买几本书就对应一种方法把一个方法可能碰到的情况都写出来会让你的代码更灵活更健壮。
要注意每个重载必须形参不同如果写两个方法形参一样、方法体不一样系统无法分辨你要使用哪一个。 class Polymorphic{/// summary/// 买一本书/// /summary/// param namebook/param/// returns/returnspublic static Liststring GetBook(string book){Liststring list new Liststring();list.Add(book);return list;}/// summary/// 买两本书/// /summary/// param namebook/param/// param namebook1/param/// returns/returnspublic static Liststring GetBook(string book, string book1){Liststring list new Liststring();list.Add(book);list.Add(book1);return list;}/// summary/// 买三本书/// /summary/// param namebook/param/// param namebook1/param/// param namebook2/param/// returns/returnspublic static Liststring GetBook(string book, string book1, string book2){Liststring list new Liststring();list.Add(book);list.Add(book1);list.Add(book2);return list;}} 重写
可在原来写好的方法上不修改原来方法进行功能扩展。 /// summary/// 画画/// /summaryclass Drawing{//virtual 表明可被重写重写可理解为在原来的基础上进行添砖加瓦。public virtual void DrawingLine(string name){Console.WriteLine(name);Console.WriteLine(-----------------);}}/// summary/// 必须继承才能重写重写不影响原方法。/// /summaryclass StudyDrawing : Drawing{/// summary/// 重写方法时需用 override 修饰原方法需表明可被重写 virtual/// /summary/// param namename/parampublic override void DrawingLine(string name){Console.WriteLine(正在画一只宠物);//重写过程中可调用旧方法base.DrawingLine(name);}} 泛型
其实我们在创建列表时就是一个泛型应用。
在尖括号中填入数据类型列表就只能存入指定的数据类型有约束作用
Listint list new Listint();
泛型方法、变量
可以不提前指定数据类型但是在编写逻辑时会碰到各种问题需要经验丰富才能写的下去我尝试几次后就放弃了暂时用不到等有需求再深入研究。
有兴趣可以参考菜鸟教程 特性
不懂
反射
不懂
预处理器
不懂
委托
不懂 改变自己是神改变别人是XXX