小白c#教程
小白c#教程
ytkz简单的认识C
namespace DataTypeApplication
{
class study
{
public int add(int a, int b)
{ int result;
result = a + b;
return result;
}
}
class Program
{
static void Main(string[] args)
{
study a = new study();
Console.WriteLine("Size of int: {0}",a.add(1,2));
Console.ReadLine();
}
}
}
1. 先看代码的整体结构
这段代码可以分成两部分:
namespace DataTypeApplication
(命名空间,类似“文件夹”)class study
(一个“工具类”,里面装了方法)class Program
(程序的“入口类”,包含启动代码)
2. 逐行解释代码
第1行:namespace DataTypeApplication
命名空间就像一个“文件夹”,用来把相关的代码(类、方法等)装在一起,避免不同项目中出现同名的类导致冲突。
比如:你有一个“数学工具”文件夹(DataTypeApplication
),里面放了一个“学习类”(study
),专门装计算相关的方法。
第4-8行:class study
类
类是C#中“对象的模板”,可以理解为一个“工具箱”,里面装了各种“工具”(方法)。
这里的 study
类里有一个 add
方法(加法工具):
public int add(int a, int b) // 方法定义
{
int result; // 声明一个变量存结果
result = a + b; // 计算a和b的和
return result; // 返回结果
}
public
:表示这个方法是“公开的”,可以从类的外面调用(类似工具箱里的工具是“开放的”,任何人都能用)。int
(返回类型):表示这个方法执行完后会“返回”一个整数(比如1+2的结果是3,就是int
类型)。(int a, int b)
(参数):方法需要“输入”两个整数(a
和b
),比如调用时传入1和2。
第10-16行:class Program
类
Program
类是C#程序的“起点”,程序运行时会从这里开始执行。里面的 Main
方法是程序的“入口”(必须有的!)。
第13-16行:static void Main(string[] args)
Main
方法是程序的“启动按钮”,代码从这里开始跑:
static void Main(string[] args)
{
study a = new study(); // 创建一个study类的“实例”(对象)
Console.WriteLine("Size of int: {0}", a.add(1, 2)); // 调用add方法,输出结果
Console.ReadLine(); // 让窗口保持打开(否则一闪而过)
}
3. 关键细节解释
study a = new study();
这行代码的意思是:创建一个 study
类的“对象”(相当于根据“工具箱”的设计图,造出一个具体的工具箱)。
study
是类名(工具箱的设计图)。a
是对象的“名字”(你可以自己取,比如calculator
)。new
关键字是“造对象”的命令(相当于“按设计图生产一个工具箱”)。
a.add(1, 2)
调用 a
对象的 add
方法,传入参数1和2,计算1+2的结果(3),并返回这个结果。
Console.WriteLine(...)
这是“向控制台输出内容”的命令。
"Size of int: {0}"
是一个“模板字符串”,{0}
是“占位符”,会被后面的a.add(1, 2)
的结果(3)替换。- 最终输出的内容是:
Size of int: 3
(虽然这里的文字“Size of int”不太准确,实际是加法结果,但不影响运行)。
Console.ReadLine();
这行代码的作用是“让控制台窗口保持打开”。如果不写这行,程序执行完会立刻关闭,你看不到输出结果。
4. 整个程序的运行流程
- 双击运行程序 → 系统找到
Program
类的Main
方法,开始执行。 Main
方法里创建了一个study
对象(a
)。- 调用
a.add(1, 2)
,计算1+2=3。 - 把结果3填入
Console.WriteLine
的模板字符串,输出到控制台:Size of int: 3
。 - 执行
Console.ReadLine()
,等待你按回车键,窗口才会关闭。
5. 新手友好的C#基础概念总结
- 类(Class):像一个“工具箱”或“模板”,里面装方法(功能)。比如
study
类是“数学工具箱”,add
是里面的“加法工具”。 - 对象(Object):根据类“生产”出来的具体实例。比如
study a = new study();
就是生产了一个“数学工具箱”。 - 方法(Method):类里的“功能”,比如
add
方法的功能是计算两数之和。 - 命名空间(Namespace):组织代码的“文件夹”,避免重名冲突。
给study类增加一个方法
namespace DataTypeApplication
{
class study
{
public int add(int a, int b)
{ int result;
result = a + b;
return result;
}
public (int A, int B) swap(int a, int b)
{ int result1, result2;
result1 = a;
result2 = b;
return (result2, result1);
}
}
class Program
{
static void Main(string[] args)
{
study a = new study();
Console.WriteLine("Size of int: {0}",a.add(1,2));
var swappedValues = a.swap(1, 22);
Console.WriteLine("swap: {0},{1}",swappedValues.A,swappedValues.B);
Console.ReadLine();
}
}
}
增加的方式 是交换数值。
一、两个代码的核心区别
第一个代码只有 add
方法(计算两数之和),第二个代码在 study
类中新增了一个 swap
方法,并在 Main
方法中调用了它。我们重点看新增的部分。
二、新增代码逐行解释
1. swap
方法的定义
public (int A, int B) swap(int a, int b)
{
int result1, result2;
result1 = a; // 把a的值存到result1(比如a=1,result1=1)
result2 = b; // 把b的值存到result2(比如b=22,result2=22)
return (result2, result1); // 返回交换后的两个值(result2=22,result1=1 → 相当于交换了)
}
关键点解释:
- 返回类型
(int A, int B)
:这是C#的元组(Tuple)语法,表示这个方法会返回“两个整数”。int A
和int B
是元组的“元素名”(可以自己取名字,比如swappedFirst
和swappedSecond
),让返回值更易读。- 元组允许方法一次返回多个值(不用再通过“输出参数”或其他复杂方式)。
2. Main
方法中调用 swap
var swappedValues = a.swap(1, 22);
Console.WriteLine("swap: {0},{1}", swappedValues.A, swappedValues.B);
关键点解释:
var
关键字:这是一个“自动类型推断”的关键字。编译器会根据a.swap(1, 22)
的返回值(这里是元组(int A, int B)
),自动推断swappedValues
的类型是(int A, int B)
,不用手动写类型名(比如tuple<int, int>
),代码更简洁。- 接收返回值:
swap
方法返回了一个元组,swappedValues
就是这个元组的“实例”。 - 访问元组元素:通过
swappedValues.A
和swappedValues.B
可以分别获取元组的第一个和第二个元素的值(对应交换后的结果)。
三、新增代码的功能总结
第二个代码的核心新增功能是:
在 study
类中添加了一个 swap
方法,它能接收两个整数,返回它们交换后的结果(比如传入1和22,返回22和1)。
然后在 Main
方法中调用这个 swap
方法,接收返回的元组,并输出交换后的两个值。
四、关键C#知识点(新手必看)
1. 元组(Tuple):返回多个值的“容器”
C# 中,普通方法只能返回一个值(比如 add
返回一个 int
)。但有时候需要返回多个值(比如交换两个数,需要同时返回交换后的两个数),这时候可以用元组。
元组就像一个“小盒子”,可以装多个值,还能给每个值起名字(比如 A
和 B
),让代码更易读。
2. 值类型参数的“副本”特性
注意:swap
方法虽然返回了交换后的值,但不会修改传入的原始变量。比如:
int x = 1, y = 22;
a.swap(x, y); // 调用swap,但x和y的值还是1和22(因为方法参数是原始值的“副本”)
这是因为 int
是“值类型”,方法接收的是原始值的“复印件”(副本),修改副本不影响原始值。这也是为什么 swap
方法需要返回交换后的值,而不是直接修改输入参数的原因。
3. var
关键字:自动推断类型
var swappedValues = ...
中的 var
是“自动类型推断”关键字。编译器会自动根据右边的表达式(a.swap(1, 22)
返回的元组)推断 swappedValues
的类型是 (int A, int B)
。
这样写更简洁,尤其是当类型名称很长时(比如元组、泛型类型),var
能减少重复代码。
五、运行效果演示
假设运行第二个代码:
a.add(1, 2)
会计算1+2=3
,输出Size of int: 3
(虽然文字不太准确,但结果是对的)。a.swap(1, 22)
会返回元组(22, 1)
,然后swappedValues.A
是22,swappedValues.B
是1,输出swap: 22,1
。