
C# .Net Core零基础从入门到精通实战教程全集【190课】------夏の哉------97it.-------top/-------13939/
C# 语法快速上手:从变量到面向对象编程
C# 作为一种简洁、现代、类型安全的编程语言,在桌面应用、Web 开发、游戏开发等多个领域都有着广泛的应用。对于初学者来说,掌握 C# 的基本语法并逐步过渡到面向对象编程,是入门的关键。本文将从变量、数据类型等基础概念入手,逐步深入到面向对象编程的核心内容,帮助你快速上手 C#。
变量与数据类型
在 C# 中,变量是用于存储数据的容器,每个变量都有特定的数据类型,这决定了变量可以存储的数据种类和范围。
C# 的基本数据类型可分为值类型和引用类型。值类型直接存储数据本身,包括整数类型(如 int、long、short)、浮点类型(如 float、double)、字符类型(char)、布尔类型(bool)等。例如,int age = 25; 定义了一个 int 类型的变量 age,并赋值为 25;double height = 1.75; 定义了一个 double 类型的变量 height,赋值为 1.75。
引用类型则存储数据的引用(即数据在内存中的地址),包括字符串(string)、数组、类、接口等。字符串类型是比较常用的引用类型,例如 string name = "张三"; 定义了一个 string 类型的变量 name,存储了字符串 "张三"。需要注意的是,字符串一旦创建就不可修改,对字符串的修改实际上是创建了一个新的字符串对象。
变量的命名需要遵循一定的规则,只能由字母、数字和下划线组成,且不能以数字开头,同时不能使用 C# 的关键字(如 int、class 等)作为变量名。良好的变量命名习惯有助于提高代码的可读性,通常建议使用有意义的名称,如用 age 表示年龄,用 name 表示姓名。
控制流语句
控制流语句用于控制程序的执行顺序,包括条件语句和循环语句。
条件语句主要有 if-else 和 switch-case。if-else 语句根据条件的真假执行不同的代码块,例如:
arduino
int score = 85;
if (score >= 90)
{
Console.WriteLine("优秀");
}
else if (score >= 70)
{
Console.WriteLine("良好");
}
else
{
Console.WriteLine("及格");
}
这段代码根据 score 的值判断并输出对应的等级。
switch-case 语句适用于多条件判断的场景,根据表达式的值匹配对应的 case 标签执行相应的代码,例如:
arduino
char grade = 'B';
switch (grade)
{
case 'A':
Console.WriteLine("优秀");
break;
case 'B':
Console.WriteLine("良好");
break;
case 'C':
Console.WriteLine("及格");
break;
default:
Console.WriteLine("不及格");
break;
}
循环语句用于重复执行一段代码,常用的有 for、while 和 do-while。for 循环适用于已知循环次数的情况,例如:
css
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
这段代码会输出 0 到 4 这 5 个数字。
while 循环先判断条件,当条件为真时执行循环体,例如:
ini
int count = 0;
while (count < 3)
{
Console.WriteLine("循环次数:" + count);
count++;
}
do-while 循环则先执行一次循环体,再判断条件,至少会执行一次循环体,例如:
dart
int num = 5;
do
{
Console.WriteLine(num);
num--;
} while (num > 0);
函数
函数是一段完成特定功能的代码块,可以被多次调用,提高代码的复用性。在 C# 中,函数的定义包括函数名、返回值类型、参数列表和函数体。
函数的基本语法如下:
scss
返回值类型 函数名(参数列表)
{
// 函数体
}
例如,定义一个计算两个整数之和的函数:
arduino
int Add(int a, int b)
{
return a + b;
}
这个函数的返回值类型是 int,函数名是 Add,参数列表是两个 int 类型的参数 a 和 b,函数体实现了 a 加 b 的运算并返回结果。
调用函数时,只需使用函数名并传入相应的参数即可,例如:
ini
int result = Add(3, 5);
Console.WriteLine(result); // 输出8
函数还可以有可选参数和参数数组。可选参数在定义时指定默认值,调用时可以省略该参数,例如:
arduino
void ShowInfo(string name, int age = 18)
{
Console.WriteLine("姓名:" + name + ",年龄:" + age);
}
// 调用时可以省略age参数
ShowInfo("张三"); // 输出"姓名:张三,年龄:18"
ShowInfo("李四", 20); // 输出"姓名:李四,年龄:20"
参数数组用于接受数量可变的参数,使用 params 关键字定义,例如:
csharp
int Sum(params int[] numbers)
{
int sum = 0;
foreach (int num in numbers)
{
sum += num;
}
return sum;
}
// 调用时可以传入任意数量的int类型参数
int total = Sum(1, 2, 3, 4);
Console.WriteLine(total); // 输出10
面向对象编程基础
C# 是一种面向对象的编程语言,面向对象编程的核心概念包括类、对象、继承、封装和多态。
类与对象
类是对具有相同属性和行为的事物的抽象描述,对象是类的实例。例如,"人" 可以抽象为一个类(Person),类中包含姓名、年龄等属性,以及吃饭、睡觉等方法(行为)。
csharp
class Person
{
// 字段(属性)
public string name;
public int age;
// 方法(行为)
public void Eat()
{
Console.WriteLine(name + "在吃饭");
}
public void Sleep()
{
Console.WriteLine(name + "在睡觉");
}
}
上述代码定义了一个 Person 类,有 name 和 age 两个公共字段,以及 Eat 和 Sleep 两个方法。通过类可以创建对象,例如:
ini
Person person = new Person();
person.name = "张三";
person.age = 25;
person.Eat(); // 输出"张三在吃饭"
person.Sleep(); // 输出"张三在睡觉"
封装
封装是指将类的字段和方法隐藏起来,只提供公共的访问接口,以保护数据的安全性。通常将字段设置为私有(private),通过公共的属性(property)来访问和修改字段。
csharp
class Student
{
private string _studentId; // 私有字段
// 公共属性
public string StudentId
{
get { return _studentId; }
set { _studentId = value; }
}
private int _score;
public int Score
{
get { return _score; }
set
{
// 对分数进行验证,确保在0-100之间
if (value >= 0 && value <= 100)
_score = value;
else
Console.WriteLine("分数无效");
}
}
}
在这个 Student 类中,_studentId 和_score 是私有字段,通过 StudentId 和 Score 属性来访问和修改。在 Score 属性的 set 访问器中,对赋值进行了验证,确保分数的有效性,这体现了封装的思想。
继承
继承允许一个类(派生类)继承另一个类(基类)的属性和方法,派生类可以新增自己的属性和方法,也可以重写基类的方法。继承提高了代码的复用性和扩展性。
csharp
// 基类
class Animal
{
public string name;
public void Eat()
{
Console.WriteLine(name + "在吃东西");
}
public virtual void MakeSound()
{
Console.WriteLine("动物发出声音");
}
}
// 派生类Dog继承自Animal
class Dog : Animal
{
// 重写基类的MakeSound方法
public override void MakeSound()
{
Console.WriteLine(name + "汪汪叫");
}
// 新增方法
public void Run()
{
Console.WriteLine(name + "在跑步");
}
}
Dog 类继承自 Animal 类,重写了 MakeSound 方法,使其输出 "汪汪叫",并新增了 Run 方法。使用派生类创建对象时,可以调用基类的方法和派生类自己的方法:
ini
Dog dog = new Dog();
dog.name = "小黑";
dog.Eat(); // 调用基类方法,输出"小黑在吃东西"
dog.MakeSound(); // 调用重写后的方法,输出"小黑汪汪叫"
dog.Run(); // 调用派生类新增方法,输出"小黑在跑步"
多态
多态是指同一操作作用于不同的对象,会产生不同的结果。在 C# 中,多态可以通过抽象类、接口和虚方法实现。
通过虚方法实现多态的例子在继承部分已有体现,基类的 MakeSound 方法被声明为 virtual,派生类重写该方法,当使用基类引用指向派生类对象时,调用该方法会执行派生类的实现:
ini
Animal animal = new Dog();
animal.name = "小白";
animal.MakeSound(); // 输出"小白汪汪叫"
接口是一种完全抽象的类型,只包含方法的声明,不包含实现。类可以实现多个接口,从而实现多态。
csharp
interface IFlyable
{
void Fly();
}
class Bird : IFlyable
{
public void Fly()
{
Console.WriteLine("鸟在飞");
}
}
class Plane : IFlyable
{
public void Fly()
{
Console.WriteLine("飞机在飞");
}
}
Bird 和 Plane 都实现了 IFlyable 接口,分别实现了 Fly 方法。当使用 IFlyable 接口引用指向不同的对象时,调用 Fly 方法会产生不同的结果:
ini
IFlyable flyable1 = new Bird();
flyable1.Fly(); // 输出"鸟在飞"
IFlyable flyable2 = new Plane();
flyable2.Fly(); // 输出"飞机在飞"
总结
本文从变量、数据类型、控制流语句、函数等基础语法入手,逐步介绍了 C# 面向对象编程的核心概念,包括类、对象、封装、继承和多态。掌握这些知识是进行 C# 开发的基础,在实际编程中,还需要不断练习和实践,熟悉 C# 的各种特性和类库,才能编写出高效、可维护的代码。随着学习的深入,你还会接触到更多高级特性,如泛型、委托、事件等,进一步提升自己的编程能力。