csharp:变量

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
csharp:变量 [2025/11/20 17:18] 张叶安csharp:变量 [2025/12/22 11:23] (当前版本) 张叶安
行 1: 行 1:
-<markdown> +====== C# 变量作用域与数据类型 ======
-# 变量作用域使用范围+
  
-一个类里面定义的变量不能在该类之外使用+===== 变量作用域使用范围 =====
  
-除非使用静态修饰[变量的修饰符、默认私有]+在 C# 中,变量的可访问性取决于其定义的位置和修饰符
  
-变量类 +  * **类级变量(字段)**:一个里面定义的变量,默认情况下不能在该类之外直接使用。 
-## 型种类 +  * **默认修饰符**:成员默认是 `private`(私有),仅限内部访问。 
-</markdown>+  * **公开访问**:若需外部访问,需使用 `public` 修饰。 
 +  * **静态访问**:若使用 `static` 修饰,则该变量属于类本身,而非类的实例,可通过 `类名.变量名` 访问。
  
-{{.:pasted:20251120-142725.png}}+===== 变量类型 =====
  
-<markdown> +C# 的数据类型主要分为三大类
-- 值类型:值存在栈上+
  
-引用类型:值存在堆上+{{.:pasted:20251120-142725.png}}
  
-指针类型:需打开安全模式+  * **值类型 (Value Types)**:数据直接存储在**栈 (Stack)** 上。包含:整数、浮点数、布尔值、字符、结构体 (struct)、枚举 (enum)。 
 +  * **引用类型 (Reference Types)**:数据存储在**堆 (Heap)** 上,栈中只存储指向堆内存的地址(引用)。包含:类 (class)、接口 (interface)、数组、字符串 (string)、委托 (delegate)。 
 +  * **指针类型 (Pointer Types)**用于直接操作内存地址,在 `unsafe` 模式下使用。
  
-## 值类型范围 +引用类型不进行转换,直接引用地址,程序效率会快一
-</markdown> +
-{{.:pasted:20251010-152216.png}} +
-<markdown> +
-### 浮数类型注意+
  
-</markdown>{{.:pasted:20251010-152251.png}}<markdown>+===== 值类型详解 =====
  
-浮点数后没有f默认为double 类型  float不能定义+==== 基础值类型范围 ====
  
-</markdown>{{.:pasted:20251013-092619.png}}<markdown>+{{.:pasted:20251010-152216.png}}
  
-## 引用类型+==== 浮点数类型注意事项 ====
  
-</markdown>{{.:pasted:20251013-092701.png}}<markdown>+{{.:pasted:20251010-152251.png}}
  
 +在 C# 中,带小数点的数值默认为 `double` 类型。如果需要定义 `float` 类型,必须在数值后添加后缀 **f** 或 **F**。
  
 +<code csharp>
 +// 错误写法:编译器报错,无法将 double 隐式转换为 float
 +float myFloat = 3.14; 
  
 +// 正确写法
 +float myFloat = 3.14f; 
 +double myDouble = 3.14;
 +decimal myDecimal = 3.14m; // 金额计算通常使用 decimal
 +</code>
  
-##   引用类型的理解1+{{.:pasted:20251013-092619.png}}
  
-区别:+===== 引用类型详解 =====
  
-1:创建的值类型存在栈里、+{{.:pasted:20251013-092701.png}}
  
-2:创建的引用类型是对象存在栈、在值是指向堆里、+==== 引用类型的内理解 (1) ====
  
 +**核心区别:**
  
 +  - **值类型**:创建时,值直接保存在**栈**里。
 +  - **引用类型**:创建时,对象(数据实体)保存在**堆**里,而**栈**里保存的是指向该堆内存地址的“指针”(引用)。
  
-</markdown>{{.:pasted:20251013-092736.png}}<markdown>+{{.:pasted:20251013-092736.png}}
  
-</markdown>{{.:pasted:20251013-092743.png}}<markdown>+{{.:pasted:20251013-092743.png}}
  
-总结:使用值类型时一个变量的修改不会影响其他的值、 +> **总结** 
-    +>   使用**值类型**,变量之间是独立的。修改一个变量的值**不会**影响其他变量。 
-使用引用类型时、你对一个引用类型变量值进行修改、会影响到引用的其他变量的值、 +  使用**引用类型**,如果两个变量指向同一个象,修改其中一个变量引用的对象内容,**会影响**另一个变量(因为们指向一块内存)。
-   +
-## 引用类型的理解2+
  
 +==== 引用类型的内存理解 (2) - 代码案例 ====
  
-考虑以下打印+请看以下代码示例,观察 `Stime2` 和 `Stime3` 行为:
  
-```csharp +<code csharp> 
-class ceshi+class Ceshi
 { {
-  public string name { get; set; } +    public string Name { get; set; } 
-  public int age { get; set; }+    public int Age { get; set; 
 +}
  
-+static class TestClass
-static class tes+
 { {
 +    public static void Function()
 +    {
 +        // 1. 值类型赋值(结构体或基本类型)
 +        // 假设 int 是值类型
 +        Ceshi Stime1 = new Ceshi() { Name = "A", Age = 25 };
 +        int age = Stime1.Age; // age 获得了 25 的副本
 +        Stime1.Age = 35;      // 修改 Stime1 不会影响局部变量 age
  
-  public static void fangcon() +        // 2. 引用类型赋值(类) 
-  { +        Ceshi Stime2 = new Ceshi() { Name = "B", Age = 30 }; 
- +         
-     ceshi Stime1 = new ceshi() { name = "A", age = 25 }; +        // 关键点:这里是将 Stime2 的引用(地址)赋给了 Stime3 
-     ceshi Stime2 = new ceshi() { name = "B", age = 30 }; +        // 此时 Stime2 和 Stime3 指向堆内存中的同一个对象 
-     int age = Stime1.age; +        Ceshi Stime3 = Stime2;  
-     Stime1.age = 35 ; +         
- +        // 修改 Stime2 指向对象的属性 
-     ceshi Stime3 = Stime2; +        Stime2.Name = "C"; 
-     Stime2.name = "C";+
  
-     Console.WriteLine("Stime1 age 的值  :" + Stime1.age); +        // 输出结果 
-     Console.WriteLine("局部变量 age 的值  :" + age); +        Console.WriteLine("Stime1 Age 的值  :" + Stime1.Age); // 输出 35 
-     Console.WriteLine("Stime2 age 的值  :" + Stime2.name); +        Console.WriteLine("局部变量 age 的值  :" + age);        // 输出 25 (未变) 
-     Console.WriteLine("Stime3 age 的值  :" + Stime3.name);+        Console.WriteLine("Stime2 Name 的值  :" + Stime2.Name); // 输出 C 
 +        Console.WriteLine("Stime3 Name 的值  :" + Stime3.Name); // 输出 C (因为指向同一个对象)
        
 } }
 +</code>
  
-```+==== 通用类型 Object ====
  
-总结:使用值类型时对一个变量修改不会影响其他的值、 +`object` 是所有类型的。任何类型都可以赋给 `object`。
-      +
-      而使用引用型时、你对一个引用类型变量的值进行修改、会影响到与它相同引用的其他变量的+
  
 +{{.:pasted:20251013-092906.png}}
  
- +<code csharp
- +object num1 = 3.14;      // 装箱:值类型转引用类型 
- +object num2 = "工控机";   // 字符串本身就是引用类型
- +
- +
- +
- +
- +
-### 引用类型、通用类型object  +
- +
-</markdown>{{.:pasted:20251013-092906.png}}<markdown> +
- +
-``` +
-object num1 = 3.14; +
-object num2 = "工控机";+
 object num3 = 145; object num3 = 145;
-``` +</code>
-           +
-### 类的引用与绑定理解+
  
-使fuka对象就等于使用zhuka对象成员 +==== 类的引与绑定理解 ====
  
-</markdown>{{.:pasted:20251013-092934.png}}<markdown>+当多个引用变量指向同一个实例时,使用其中任何一个变量操作成员,效果是等同的。 
 +例如:使用 `fuka` 对象就等于使用 `zhuka` 对象成员(前提是它们指向同一地址)。
  
-### 指针类型+{{.:pasted:20251013-092934.png}}
  
-## 自定义变量类型[枚举enum]+===== 指针类型 (Pointer) =====
  
-### 简介 +指针类型用于直接操作内存地址,类似于 C/C++。在 C中使用指针必须在 `unsafe` 代码块中,并且项目属性需要开启“允许不安全代码”。
  
-枚举里定义的成员变量为 整常亮+===== 自定义变量:枚举 (Enum) =====
  
-使用定义枚举变量时、必须为它赋一个枚举内部值、+==== 简介 ====
  
-枚举可以当做参数来传递+枚举 (Enumeration) 是一种值类型,用于定义一组命名的**整型常量**。
  
-</markdown>{{.:pasted:20251013-092955.png}}<markdown>+  * **特点**:增强代码可读性,避免使用魔术数字。 
 +  * **赋值**:定义枚举变量时,必须为其赋一个枚举内部定义的值。 
 +  * **传递**:枚举可以像普通变量一样作为参数传递。
  
-### 使用步骤+{{.:pasted:20251013-092955.png}}
  
-1:创建枚举类型、写出包含的成员变量+==== 使用步骤 ====
  
-2用创建枚举类型定义变量、此时该变量拥有枚举内的成员+  - **Step 1**声明枚举类型,列出包含的成员名称(默认从0开始递增)。 
 +  - **Step 2**:使用该类型定义变量,并赋值。
  
-### 枚举案例1+==== 枚举案例 1:星期 ====
  
-枚举是一种值类型,它由一组命名的常数组成。这些常数被称为枚举成员。枚举提供了一种方便的方式来定义和使用一组相关的常量值。 +<code csharp> 
- +// 创建枚举类型
-//创建枚举类型 +
- +
-```csharp+
 public enum DaysOfWeek public enum DaysOfWeek
 { {
-    Sunday, +    Sunday,    // 默认值 0 
-    Monday,+    Monday,    // 默认值 1
     Tuesday,     Tuesday,
     Wednesday,     Wednesday,
行 157: 行 159:
     Saturday     Saturday
 } }
-``` 
  
-定义了一个名为`DaysOfWeek`的枚举,包含了一周中的每一天。+// 使用枚举 
 +class Program { 
 +    static void Main() { 
 +        // 定义枚举类型变量并赋值 
 +        DaysOfWeek today = DaysOfWeek.Monday;
  
-可以像使用其他数据类型一样使用这个枚举: +        if (today == DaysOfWeek.Saturday || today == DaysOfWeek.Sunday) 
- +        
-//定义枚举类型变量并赋值[赋内部的值、自定义] +            Console.WriteLine("It's weekend!"); 
- +        } 
-```csharp +        else 
-DaysOfWeek  today  =  DaysOfWeek.Monday; +        { 
- +            Console.WriteLine("It's a weekday."); 
-if (today == DaysOfWeek.Saturday || today == DaysOfWeek.Sunday) +        } 
-+    }
-    Console.WriteLine("It's weekend!");+
 } }
-else +</code>
-+
-    Console.WriteLine("It's a weekday."); +
-+
-``` +
- +
-在这个示例中将`today`变量设置为`DaysOfWeek.Monday`,然后使用条件语句检查今天是否是周末。 +
- +
- +
- +
- +
- +
-### 枚举案例2+
  
 +==== 枚举案例 2:数学运算 ====
  
-假设有一个名为`Operations`的枚举,用于表示不同的数学运算:+假设有一个名为 `Operations` 的枚举,用于表示不同的数学运算:
  
-```csharp+<code csharp>
 public enum Operations public enum Operations
 { {
行 197: 行 190:
     Divide     Divide
 } }
-``` 
  
-我们可以使用这个枚举来定义一个函数,该函数根据传入的操作执行相应的数学运算: +// 定义一个静态函数,参数3为枚举类型
- +
-```csharp +
-//定义一个返回值是double 、参数1与2为double 类型、与参数3为枚举类型的静态函数+
 public static double PerformOperation(double num1, double num2, Operations operation) public static double PerformOperation(double num1, double num2, Operations operation)
 +{
     switch (operation)     switch (operation)
     {     {
行 222: 行 211:
     }     }
 } }
-``` +</code>
- +
-在这个示例中,我们定义了一个名为`PerformOperation`的函数,它接受两个数字和一个操作作为参数。然后,根据传入的操作,函数执行相应的数学运算并返回结果。如果传入的操作无效或除数为零,则抛出异常。 +
- +
- +
- +
-## 结构体[struct ] +
-### 简介 +
- +
-理解为一个新的数据类型 +
- +
-</markdown>{{.:pasted:20251013-093033.png}}<markdown> +
- +
-```csharp +
-struct Axis //轴结构体 +
-        { +
-            public string Axis_num { get; set; } //轴号 +
-            public string Jog_Z { get; set; };//轴号Jog_+ +
-            public string Jog_F { get; set; };//轴号Jog_- +
-            public double Vosti { get; set; };//轴速度 +
-            public double Add_Vosti { get; set; };//轴加速度 +
-            public double Add_Vosti_time { get; set; };//轴加速度时间 +
-        } +
-``` +
- +
- +
- +
- +
- +
-### 使用步骤 +
- +
- +
- +
- +
- +
- +
- +
- +
- +
-## 结构体与枚举的区别+
  
-1:枚举里定义的成员变量为整型常量、是一种描述性的词、 
-2:结构体是一种重新规划的类型集合群、 
  
-</markdown> 

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • csharp/变量.1763630285.txt.gz
  • 最后更改: 2025/11/20 17:18
  • 张叶安