C#基础系列第二篇
前言: 完全是我在学习过程中记录的笔记,只不过分享一下让很多刚开始学习.net编程的人能够很快的学会C#语言
- 使用面向对象
(1) 首先写一个类,来描述对象
(2)使用这个类实例化对象
(3)使用这个对象
- 类
(1) 就是用来描述对象的模板
1)通过特征 字段和属性
2)行为,能力 方法
class Cup
{
//类的成员
//特征
public int Volume;
public int height;
public string mater;
//行为
public void PackAble()
{
Console.WriteLine("我可以装水");
}
}
实例化:
static void Main(string[] args)
{
Cup cup = new Cup();
cup.Volume = 200;
cup.height = 15;
cup.mater = "玻璃";
cup.PackAble();
Console.ReadKey();
}
- 构造方法
(1) 为字段赋初值
语法:[public] 类名(参数)
{
//成员及执行方法
}
public void DisPlay()
{
Console.WriteLine("我是一个{0}ml,高为{1}Cm,用{2}材料做的杯具", volume, height, mater);
}
public Cup(int volume, int height, string mater)
{
this.volume = volume;
this.height = height;
this.mater = mater;
}
//执行
static void Main(string[] args)
{
Cup cup = new Cup(300, 20, "玻璃");
cup.DisPlay();
Console.ReadKey();
}
(2)如果写类的时候没有提供构造方法,系统会自动的提供一个无参构造方法
(3)如果添加了自定义的构造方法,那么系统不会在添加无参构造方法属性
- 属性
(1) 就是限制字段访问并提供字段访问方法的一个数据类型
(2)属性就是方法
(3)get表示获取值得那个方法
(4)set表示设置那个值得方法
class Cup
{
//字段
private int volume;
private int height;
private string mater;
//属性
public int Volume
{
get { return volume; }
set
{
if (value > 0)
{
volume = value;
}
else
{
Console.WriteLine("容量不能小于0");
}
}
}
}
//执行
static void Main(string[] args)
{
Cup cup = new Cup();
cup.Volume = 100;
Console.WriteLine(cup.Volume);
Console.ReadKey();
}
(5)自动属性
等价于一个字段+get,set属性(属性中无任何逻辑处理)
语法:public 返回类型 属性名{get;set;}
public string Name { get; set; }
执行:
Person p = new Person();
p.Name = "韩迎龙";
Console.WriteLine(p.Name);
Console.ReadKey();
(6)属性不具备存储数据的能力,存储数据是存储在字段里面的
(7)提供get表示可以得到字段的数据(只读属性)
(8)提供set表示可以为字段赋值(只写属性)
(9)提供get,set则表示可读可写属性继承
- 电子计算器
(1) 首先建立一个Calculator类,在这个类里面实现了计算的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | class Calculator { private int num1; private int num2; private string oper; public int Num1 { get { return num1; } set { num1 = value; } } public int Num2 { get { return num2; } set { num2 = value; } } public string Oper { get { return oper; } set { oper = value; } } public int Calculating() { int res = 0; switch (oper) { case "+" : res = num1 + num2; break ; case "-" : res = num1 - num2; break ; case "*" : res = num1 * num2; break ; case "/" : res = num1 / num2; break ; } return res; } } (2)在Main方法中实现输出信息 static void Main( string [] args) { //找到对象 Calculator cal = new Calculator(); //输入数字与运算符 Console.Write( "请输入第一个数字:" ); cal.Num1 = GetInputNum(); Console.Write( "请输入第一个数字:" ); cal.Num2 = GetInputNum(); Console.Write( "请输入运算符:" ); cal.Oper = Console.ReadLine(); //使用对象的计算方法 int res = cal.Calculating(); //得到结果 Console.WriteLine( "{0}{1}{2}={3}" , cal.Num1, cal.Oper, cal.Num2, res); Console.ReadKey(); } public static int GetInputNum() { return GetInputNum( int .MinValue, int .MaxValue); } /// <summary> /// 完成int类型数据的输入,并返回,要求输入的数字在0到给定的数字之间 /// </summary> /// <param name="max">给定的数字的上限</param> /// <returns></returns> public static int GetInputNum( int max) { return GetInputNum(0, max); } /// <summary> /// 完成int数字的输入,要求在给定范围之间 /// </summary> /// <param name="min">给定范围的下线</param> /// <param name="max">给定范围的上线</param> /// <returns></returns> public static int GetInputNum( int min, int max) { string str = Console.ReadLine(); int num; while ( true ) { try { num = Convert.ToInt32(str); if (num > min && num < max) { break ; } Console.Write( "输入数字不再{0}到{1}之间,请重新输入" , min, max); str = Console.ReadLine(); } catch { Console.Write( "输入有误,请重新输入" ); str = Console.ReadLine(); } } return num; } |
- 继承
(1) 有一个学生,老师和校长做自我介绍
1)将学生,老师和校长都有的特征先"打包"
2)再写学生,老师和校长的时候将这个"包"导入进来
3)通过继承来实现
4)写一个父类
5)再写子类的时候调用父类
->首先写一个父类Person,实现他们三个都有的方法
class Person
{
private string name;
private int age;
private char gender;
public string Name
{
get { return name; }
set { name = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
public char Gender
{
get { return gender; }
set { gender = value; }
}
public void SayHi()
{
Console.Write("你好,我是{0},今年{1}岁了,我是{2}的", name, age, gender);
}
}
->然后写Student类
class Student : Person
{
private string classname;
private string hobby;
public string Classname
{
get { return classname; }
set { classname = value; }
}
public string Hobby
{
get { return hobby; }
set { hobby = value; }
}
public void SayHello()
{
SayHi();
Console.WriteLine(",我的班级是{0},我的爱好是{1}", classname, hobby);
}
}
->写Main函数
static void Main(string[] args)
{
Student stu = new Student();
stu.Name = "韩迎龙";
stu.Age = 23;
stu.Gender = '男';
stu.Classname = ".net";
stu.Hobby = "编程";
stu.SayHello();
Console.ReadKey();
}
->其余两个类(老师和校长基本一样)
(2)构造方法实现传参
public Student(string name, int age, char gender, string classname, string hobby)
{
this.Name = name;
this.Age = age;
this.Gender = gender;
this.classname = classname;
this.hobby = hobby;
}
Student stu = new Student("韩迎龙", 23, '男', ".net", "编程");
stu.SayHello();
Console.ReadKey();
(3)在创建子类的时候会默认的调用父类的无参构造方法
1)创建对象的时候构造方法的执行顺序
(4)为什么使用继承
1)代码重用
2)实现多态(里氏转换原则)
(5)继承的特征
1)单根行
2)传递性
3)派生于object类型
注释:写类的时候字段的顺序,成员方法的顺序是不用考虑的,在一个项目中类型的顺序也是不用考虑的
- 访问修饰符
(1) protected
1)表示受保护的字段,在本类和子类中可以访问
(2)this
1)指定当前类提供的成员
2)可以调用本类的构造方法
public 类名()
{
//代码1
}
public 类名(string str)
:this()
{
//代码1
//代码2
}
举例说明:
class MyClass
{
public MyClass()
{
Console.WriteLine("我没有参数");
}
public MyClass(string str)
: this()
{
Console.WriteLine("我是字符串{0}", str);
}
static void Main(string[] args)
{
MyClass mc = new MyClass("韩迎龙");
Console.ReadKey();
}
}
(3)base
1)调用父类构造方法
2)指定父类提供的成员
1使用类库实现方法
(1)类名与命名空间至少有一个要记得
(2)每次使用的时候可以添加引用即可
初心商城:初心商城
作者:韩迎龙(Kencery) MVC/.NET群:159227188如果您认为这篇文章还不错或者有所收获,您可以通过右边的“打赏”功能 打赏一杯咖啡,本页版权归作者和博客园所有,欢迎转载,但未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构