(8)從護士到c#開發者--數據類型與繼承

(8)從護士到c#開發者--數據類型與繼承

本文將結合醫護工作場景,詳細講解c#中的命名空間、數據類型、字符串處理、繼承以及集合等重要概念,幫助醫護人員更好地理解編程知識。

最后更新 2025/3/24 下午9:47
勇敢的天使
预计阅读 17 分钟
分类
分享 課程 .NET
专题
從護士到c#開發者
标签
.NET C# 轉行開發 編程 集合

作為一名從護理行業轉行到編程領域的學習者,我發現很多編程概念都可以通過醫護工作經驗來理解。本文將結合醫院信息系統的實際場景,詳細講解 c#中的幾個重要概念。

1. 命名空間

命名空間是一種組織和管理代碼的方式,就像醫院的組織架構一樣。比如醫院分為內科、外科、護理部等不同部門,每個部門都有自己的職責和管理範圍。在 c#中,命名空間也起到類似的作用,它可以:

  1. 避免命名衝突(就像醫院裡不同科室可以有相同名字的護士)
  2. 提供邏輯分組(像醫院的科室劃分)
  3. 控制代碼的訪問範圍(類似於醫院的權限管理)

1.1命名空間的組織結構

namespace HospitalSystem          // 整个医院系统
{
    namespace Administration     // 行政管理
    {
        // 人事管理、财务管理等类
    }

    namespace Clinical          // 临床医疗
    {
        namespace Internal      // 内科
        {
            // 内科相关类
        }

        namespace Surgery       // 外科
        {
            // 外科相关类
        }
    }

    namespace Nursing          // 护理部门
    {
        namespace WardManagement        // 病房管理
        {
            // 病房相关的类
        }

        namespace MedicationManagement  // 用药管理
        {
            // 用药相关的类
        }
    }
}

1.2命名空間的使用方法

  1. 可以認為類是屬於命名空間的
  2. 如果在當前項目中沒有這個類的命名空間,需要我們手動導入這個類所在的命名空間:
    • 使用滑鼠點擊 visual studio 提示
    • 使用快捷鍵 alt+shift+f10
    • 記住常用命名空間,手動輸入

1.3在項目中使用命名空間

// 方法1:使用using导入
using HospitalSystem.Nursing;
using HospitalSystem.Pharmacy;

// 方法2:使用完整限定名称
HospitalSystem.Nursing.NursingRecord record = new HospitalSystem.Nursing.NursingRecord();

// 方法3:使用别名
using NurseRecord = HospitalSystem.Nursing.NursingRecord;

1.4項目引用示例

在一個項目中引用另一個類:

  1. 添加引用(如添加 hospitalcore.dll)
  2. 引用命名空間
using HospitalCore.Models;
using HospitalCore.Services;

2. 值類型和引用類型

2.1值類型詳解

值類型直接存儲數據本身,包括:

  1. 整數類型

    • sbyte: 8 位有符號整數 (-128 到 127)
    • byte: 8 位無符號整數 (0 到 255)
    • short: 16 位有符號整數
    • ushort: 16 位無符號整數
    • int: 32 位有符號整數(最常用)
    • uint: 32 位無符號整數
    • long: 64 位有符號整數
    • ulong: 64 位無符號整數
  2. 浮點類型

    • float: 32 位單精度浮點數(精確到 6-9 位)
    • double: 64 位雙精度浮點數(精確到 15-17 位)
    • decimal: 128 位高精度小數(常用於財務計算)
  3. 其他值類型

    • bool: 布爾值(true/false)
    • char: 16 位 unicode 字符
    • enum: 枚舉類型
    • struct: 結構體

在醫療系統中的應用示例:

public struct VitalSigns
{
    public int HeartRate;        // 心率,范围通常60-100
    public decimal Temperature;   // 体温,精确到小数点后一位,如36.5
    public int BloodPressureHigh; // 收缩压,如120
    public int BloodPressureLow;  // 舒张压,如80
    public bool IsFever;          // 是否发烧

    // 枚举示例
    public enum TemperatureMethod
    {
        Oral,      // 口温
        Axillary,  // 腋温
        Rectal     // 肛温
    }
    public TemperatureMethod Method { get; set; }

    // 值类型的数据验证方法
    public bool IsNormal()
    {
        return HeartRate >= 60 && HeartRate <= 100
            && Temperature >= 36.0m && Temperature <= 37.2m
            && BloodPressureHigh >= 90 && BloodPressureHigh <= 140
            && BloodPressureLow >= 60 && BloodPressureLow <= 90;
    }
}

2.2引用類型詳解

引用類型包括:

  1. 類(class)

    • 所有自定義類
    • 系統預定義類(如 string, object 等)
  2. 接口(interface)

  3. 委託(delegate)

  4. 數組(array)

    • 無論元素是值類型還是引用類型,數組本身都是引用類型
  5. 字符串(string)

    • 雖然經常使用,但 string 是引用類型
    • 具有特殊的不可變性質

醫療系統示例:

public class PatientRecord
{
    // 基本信息
    public string PatientName { get; set; }
    public string IdNumber { get; set; }
    public DateTime DateOfBirth { get; set; }

    // 诊断信息(数组示例)
    public string[] Diagnoses { get; set; }

    // 用药信息(集合示例)
    public List<Medication> Medications { get; set; }

    // 生命体征记录(自定义类示例)
    public List<VitalSigns> VitalSignsHistory { get; set; }

    // 委托示例 - 用于生命体征异常通知
    public delegate void VitalSignsAlertHandler(string message);
    public event VitalSignsAlertHandler OnVitalSignsAlert;

    // 深拷贝示例
    public PatientRecord Clone()
    {
        var newRecord = new PatientRecord
        {
            PatientName = this.PatientName,
            IdNumber = this.IdNumber,
            DateOfBirth = this.DateOfBirth,
            Diagnoses = (string[])this.Diagnoses.Clone(),
            Medications = this.Medications.Select(m => m.Clone()).ToList(),
            VitalSignsHistory = this.VitalSignsHistory.Select(vs => vs.Clone()).ToList()
        };

        return newRecord;
    }
}

public class Medication
{
    public string Name { get; set; }
    public double Dosage { get; set; }

    // 深拷贝方法
    public Medication Clone()
    {
        return new Medication
        {
            Name = this.Name,
            Dosage = this.Dosage
        };
    }
}

public class VitalSigns
{
    public decimal Temperature { get; set; }
    public int HeartRate { get; set; }

    // 深拷贝方法
    public VitalSigns Clone()
    {
        return new VitalSigns
        {
            Temperature = this.Temperature,
            HeartRate = this.HeartRate
        };
    }
}

2.3內存存儲區別詳解

在 c#中,內存分為棧(stack)和堆(heap)兩個主要區域:

  1. 棧(stack)

    • 存儲值類型的數據
    • 由系統自動管理內存的分配和釋放
    • 訪問速度快
    • 空間有限
    • 按後進先出(lifo)的順序存儲
  2. 堆(heap)

    • 存儲引用類型的實際數據
    • 需要垃圾回收器(gc)管理內存
    • 空間較大但訪問速度相對較慢
    • 內存分配和回收更靈活

示例代碼:

public class MemoryExample
{
    public void DemonstrateMemoryUsage()
    {
        // 值类型示例
        int temperature = 37;         // 直接在栈上分配4字节
        bool isCritical = true;       // 直接在栈上分配1字节
        DateTime checkTime = DateTime.Now; // 虽然DateTime是struct,但仍在栈上分配

        // 引用类型示例
        string patientName = "张三";   // 在堆上分配字符串数据,栈上存储引用
        PatientRecord record = new PatientRecord(); // 对象在堆上,引用在栈上

        // 值类型复制示例
        int temp2 = temperature;      // 在栈上创建新的独立副本
        temp2 = 38;                   // 修改temp2不影响temperature
        Console.WriteLine($"原温度: {temperature}, 新温度: {temp2}"); // 37, 38

        // 引用类型复制示例
        PatientRecord record2 = record; // 复制引用,两个变量指向同一个堆上的对象
        record2.PatientName = "李四";   // 通过record2修改会影响record
        Console.WriteLine($"record的病人: {record.PatientName}"); // 输出"李四"

        // 字符串特例示例
        string str1 = "测试";
        string str2 = "测试";     // str2和str1指向同一个字符串对象(字符串池)
        string str3 = new string(new char[] { '测', '试' }); // 强制创建新对象

        // 数组示例
        int[] temperatures = new int[] { 36, 37, 38 }; // 数组对象在堆上,元素在数组对象内连续存储
        int[] temps2 = temperatures;  // 复制引用
        temps2[0] = 39;              // 修改temps2同时影响temperatures
    }

    // 值类型作为参数
    public void UpdateTemperature(int temp)
    {
        temp = 39; // 不会影响原始值
    }

    // 引用类型作为参数
    public void UpdatePatient(PatientRecord patient)
    {
        patient.PatientName = "王五"; // 会影响原始对象
    }
}

3. 字符串處理

字符串在醫療信息系統中使用非常頻繁,比如病歷記錄、醫囑記錄等。c#提供了豐富的字符串處理方法:

3.1字符串的特性

  1. 不可變性:字符串是不可變的,每次修改都會創建新的字符串對象
  2. 字符串池:相同的字符串字面量會共享同一個對象
  3. 可以看作是 char 類型的只讀數組

3.2常用字符串方法詳解

public class NursingNoteProcessor
{
    public void ProcessNursingNotes()
    {
        // 护理记录示例
        string note = "  患者张三,男,62岁。\n" +
                     "警告:对青霉素过敏!\n" +
                     "  体温37.2℃,血压120/80mmHg  ";

        // 1. 基本字符串操作
        Console.WriteLine($"记录长度: {note.Length}");  // 获取字符串长度

        // 2. 空白处理
        string trimmed = note.Trim();      // 去除两端空格
        string trimStart = note.TrimStart(); // 去除开头空格
        string trimEnd = note.TrimEnd();    // 去除结尾空格

        // 3. 大小写转换
        string upper = note.ToUpper();     // 转大写(用于重要警告)
        string lower = note.ToLower();     // 转小写

        // 4. 查找操作
        bool hasAllergy = note.Contains("过敏");  // 检查是否包含某字符串
        int allergyIndex = note.IndexOf("过敏");  // 查找第一次出现的位置
        int lastIndex = note.LastIndexOf(",");   // 查找最后一次出现的位置

        // 5. 替换操作
        string replaced = note.Replace("警告", "【警告】");
        string noSpaces = note.Replace(" ", "");

        // 6. 字符串分割
        string[] lines = note.Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
        foreach (string line in lines)
        {
            Console.WriteLine($"行内容: {line.Trim()}");
        }

        // 7. 子串提取
        int ageStart = note.IndexOf(",") + 1;
        int ageEnd = note.IndexOf("岁");
        string age = note.Substring(ageStart, ageEnd - ageStart);
        Console.WriteLine($"年龄: {age}"); // 输出: 62

        // 8. 字符串比较
        bool isEqual = note.Equals("其他记录", StringComparison.OrdinalIgnoreCase); // 忽略大小写比较
        bool startsWith = note.StartsWith("患者");  // 检查开头
        bool endsWith = note.EndsWith("mmHg");    // 检查结尾

        // 9. 字符串拼接
        string[] vitals = { "体温: 37.2℃", "血压: 120/80mmHg", "心率: 75次/分" };
        string summary = string.Join(", ", vitals);
        Console.WriteLine($"生命体征: {summary}");

        // 10. 字符串构建(处理大量字符串拼接)
        StringBuilder noteBuilder = new StringBuilder();
        noteBuilder.AppendLine("患者基本信息:");
        noteBuilder.AppendLine($"姓名:张三");
        noteBuilder.AppendLine($"年龄:{age}岁");
        noteBuilder.AppendLine($"生命体征:{summary}");
        string finalNote = noteBuilder.ToString();
    }
}

4. 繼承

繼承是面向對象編程的核心概念之一,在醫院管理系統中有很多應用場景。

4.1繼承的基本概念

  1. 繼承的本質:

    • 代碼重用
    • 建立類之間的父子關係
    • 實現多態性
  2. 繼承的特性:

    • 單根性:一個類只能有一個直接父類
    • 傳遞性:子類繼承父類的所有特性,包括父類從其父類繼承的特性
    • 子類可以擴展父類的功能
    • 子類可以重寫父類的方法

4.2醫院員工繼承體系示例

// 基类:医院员工
public abstract class HospitalEmployee
{
    protected string id;
    protected string name;
    public string Department { get; set; }
    public DateTime HireDate { get; set; }

    // 构造函数
    public HospitalEmployee(string id, string name)
    {
        this.id = id;
        this.name = name;
    }

    // 虚方法 - 允许子类重写
    public virtual string GetDutyDescription()
    {
        return $"{name}在{Department}工作";
    }

    // 抽象方法 - 子类必须实现
    public abstract decimal CalculateSalary();
}

// 护士类
public class Nurse : HospitalEmployee
{
    public string NursingLevel { get; set; }
    public string Shift { get; set; }
    private decimal baseSalary;

    public Nurse(string id, string name, string level)
        : base(id, name)
    {
        NursingLevel = level;
        SetBaseSalary();
    }

    private void SetBaseSalary()
    {
        switch (NursingLevel)
        {
            case "初级": baseSalary = 5000M; break;
            case "中级": baseSalary = 7000M; break;
            case "高级": baseSalary = 9000M; break;
            default: baseSalary = 4000M; break;
        }
    }

    public override string GetDutyDescription()
    {
        return $"{name}是{Department}的{NursingLevel}级护士,{Shift}班次";
    }

    public override decimal CalculateSalary()
    {
        decimal shiftBonus = Shift == "夜班" ? 1000M : 0M;
        return baseSalary + shiftBonus;
    }
}

// 主管护士类
public class HeadNurse : Nurse
{
    public List<Nurse> TeamMembers { get; set; }
    private const decimal MANAGEMENT_BONUS = 2000M;

    public HeadNurse(string id, string name)
        : base(id, name, "主管")
    {
        TeamMembers = new List<Nurse>();
    }

    public void AddTeamMember(Nurse nurse)
    {
        TeamMembers.Add(nurse);
    }

    public override decimal CalculateSalary()
    {
        return base.CalculateSalary() + MANAGEMENT_BONUS;
    }

    // 新增的管理方法
    public string GenerateTeamReport()
    {
        StringBuilder report = new StringBuilder();
        report.AppendLine($"{Department}护理团队报告");
        report.AppendLine($"主管护士:{name}");
        report.AppendLine($"团队成员:{TeamMembers.Count}人");
        foreach (var nurse in TeamMembers)
        {
            report.AppendLine($"- {nurse.GetDutyDescription()}");
        }
        return report.ToString();
    }
}

5. 集合

在醫院信息系統中,我們經常需要處理多個數據項的集合,比如病人列表、藥品庫存等。c#提供了多種集合類型供我們使用。

5.1 arraylist 詳解

arraylist 是一個非泛型集合,可以存儲任意類型的對象。

特點:

  1. 動態大小:自動擴展容量
  2. 可以存儲不同類型的數據
  3. 需要類型轉換,性能較差
  4. 不建議在新代碼中使用,推薦使用泛型 list
public class PatientListManager
{
    private ArrayList patientList = new ArrayList();

    public void DemonstrateArrayList()
    {
        // 添加不同类型的数据
        patientList.Add("张三");           // 字符串
        patientList.Add(new Patient());    // 患者对象
        patientList.Add(42);               // 数字

        // 容量和数量
        Console.WriteLine($"容量: {patientList.Capacity}"); // 默认4,按需翻倍增长
        Console.WriteLine($"实际数量: {patientList.Count}");

        // 插入元素
        patientList.Insert(0, "急诊病人");

        // 检查包含
        bool hasPatient = patientList.Contains("张三");

        // 遍历(需要类型转换)
        foreach (object item in patientList)
        {
            if (item is Patient patient)
            {
                Console.WriteLine($"病人: {patient.Name}");
            }
        }

        // 删除操作
        patientList.Remove("张三");        // 删除特定元素
        patientList.RemoveAt(0);          // 删除指定位置的元素
        patientList.Clear();              // 清空集合
    }
}

5.2 hashtable 與 dictionary 對比

鍵值對集合在醫療系統中很常用,比如藥品庫存管理。

hashtable(非泛型):

  • 鍵和值都是 object 類型
  • 需要類型轉換
  • 性能較差
  • 不建議在新代碼中使用

dictionary<tkey, tvalue>(泛型):

  • 類型安全
  • 性能更好
  • 推薦使用
public class MedicineInventoryManager
{
    // Hashtable示例(旧方式)
    private Hashtable medicineStockOld = new Hashtable();

    // Dictionary示例(推荐方式)
    private Dictionary<string, int> medicineStock = new Dictionary<string, int>();

    public void CompareCollections()
    {
        // Hashtable操作
        medicineStockOld.Add("阿莫西林", 100);
        medicineStockOld["布洛芬"] = 50;

        // 类型转换问题示例
        int oldStock = (int)medicineStockOld["阿莫西林"]; // 需要显式转换

        // Dictionary操作
        medicineStock.Add("阿莫西林", 100);
        medicineStock["布洛芬"] = 50;

        // 安全的值获取
        if (medicineStock.TryGetValue("阿莫西林", out int stock))
        {
            Console.WriteLine($"阿莫西林库存: {stock}");
        }

        // 检查键是否存在
        if (medicineStock.ContainsKey("布洛芬"))
        {
            medicineStock["布洛芬"] -= 10; // 减少库存
        }

        // 遍历比较
        foreach (DictionaryEntry entry in medicineStockOld)
        {
            Console.WriteLine($"药品: {entry.Key}, 库存: {entry.Value}");
        }

        foreach (KeyValuePair<string, int> kvp in medicineStock)
        {
            Console.WriteLine($"药品: {kvp.Key}, 库存: {kvp.Value}");
        }

        // 仅遍历键或值
        foreach (string medicine in medicineStock.Keys)
        {
            Console.WriteLine($"药品: {medicine}");
        }

        // 转换为列表
        List<string> medicineList = medicineStock.Keys.ToList();
    }
}

5.3 list詳解

list是最常用的泛型集合類型,提供類型安全和更好的性能。

public class NursingScheduleManager
{
    private List<Nurse> nurses = new List<Nurse>();

    public void DemonstrateList()
    {
        // 添加元素
        nurses.Add(new Nurse("N001", "张护士", "初级"));
        nurses.Add(new Nurse("N002", "李护士", "中级"));

        // 批量添加
        var newNurses = new List<Nurse>
        {
            new Nurse("N003", "王护士", "高级"),
            new Nurse("N004", "赵护士", "中级")
        };
        nurses.AddRange(newNurses);

        // 查找操作
        Nurse foundNurse = nurses.Find(n => n.NursingLevel == "中级");
        List<Nurse> juniorNurses = nurses.FindAll(n => n.NursingLevel == "初级");

        // 排序
        nurses.Sort((n1, n2) => n1.NursingLevel.CompareTo(n2.NursingLevel));

        // LINQ操作
        var dayShiftNurses = nurses.Where(n => n.Shift == "白班").ToList();
        var nurseCount = nurses.Count(n => n.NursingLevel == "中级");
        var orderedNurses = nurses.OrderBy(n => n.Name).ToList();

        // 转换
        var nurseNames = nurses.Select(n => n.Name).ToList();

        // 检查条件
        bool hasNightNurse = nurses.Any(n => n.Shift == "夜班");
        bool allJunior = nurses.All(n => n.NursingLevel == "初级");

        // 删除操作
        nurses.Remove(foundNurse);
        nurses.RemoveAll(n => n.NursingLevel == "实习");

        // 范围操作
        var someNurses = nurses.GetRange(0, 2); // 获取前两个护士
        nurses.RemoveRange(0, 2);              // 删除前两个护士
    }
}

6. 類型轉換詳解

在醫院信息系統中,類型轉換經常用於處理不同類型的醫護人員和病歷記錄。

6.1類型轉換的基本概念

  1. 隱式轉換:自動進行,安全無數據丟失
  2. 顯式轉換:需要手動進行,可能存在數據丟失風險
  3. 引用類型轉換:涉及繼承關係的類型轉換

6.2醫療系統中的類型轉換示例

public class StaffManager
{
    public void DemonstrateTypeConversion()
    {
        // 基本类型转换
        int heartRate = 75;
        double hrDouble = heartRate;    // 隐式转换
        decimal hrDecimal = (decimal)hrDouble; // 显式转换

        // 字符串转换
        string hrString = heartRate.ToString();
        int parsedHR = int.Parse("75"); // 字符串转数字

        // TryParse安全转换
        if (int.TryParse("75", out int result))
        {
            Console.WriteLine($"转换成功:{result}");
        }

        // 引用类型转换示例
        HospitalEmployee employee = new Nurse("N001", "张护士", "初级");

        // 1. is运算符 - 检查类型
        if (employee is Nurse)
        {
            Console.WriteLine("这是一名护士");
        }
        else if (employee is Doctor)
        {
            Console.WriteLine("这是一名医生");
        }

        // 2. as运算符 - 安全转换
        Nurse nurse = employee as Nurse;
        if (nurse != null)
        {
            Console.WriteLine($"护士级别: {nurse.NursingLevel}");
        }

        // 3. 显式转换
        try
        {
            Nurse nurse2 = (Nurse)employee;
            Console.WriteLine($"转换成功: {nurse2.NursingLevel}");
        }
        catch (InvalidCastException ex)
        {
            Console.WriteLine($"转换失败: {ex.Message}");
        }

        // 4. 模式匹配(C# 7.0+)
        if (employee is Nurse nurseMatch)
        {
            Console.WriteLine($"匹配成功: {nurseMatch.NursingLevel}");
        }

        // 5. switch模式匹配
        string GetEmployeeInfo(HospitalEmployee emp)
        {
            return emp switch
            {
                Nurse n => $"护士 {n.Name}, 级别 {n.NursingLevel}",
                Doctor d => $"医生 {d.Name}, 专业 {d.Specialty}",
                _ => $"员工 {emp.Name}"
            };
        }
    }

    // 自定义转换示例
    public class VitalSignsConverter
    {
        public static implicit operator string(VitalSigns vs)
        {
            return $"体温: {vs.Temperature}℃, 心率: {vs.HeartRate}次/分";
        }

        public static explicit operator VitalSigns(string data)
        {
            // 简单示例,实际应该有更复杂的解析逻辑
            var parts = data.Split(',');
            return new VitalSigns
            {
                Temperature = decimal.Parse(parts[0]),
                HeartRate = int.Parse(parts[1])
            };
        }
    }
}

6.3類型轉換最佳實踐

  1. 優先使用安全的轉換方法:

    • 使用 tryparse 而不是 parse
    • 使用 as 運算符而不是直接類型轉換
    • 總是檢查轉換結果
  2. 處理轉換異常:

public decimal ParseTemperature(string temp) { try { return decimal.Parse(temp); } catch (FormatException) { Console.WriteLine("温度格式不正确"); return 0; } catch (OverflowException) { Console.WriteLine("温度值超出范围"); return 0; } }


## 總結

在這篇文章中,我們通過醫院信息系統的實際場景,詳細探討了 c#中的幾個重要概念:

1. **命名空間**

- 理解了命名空間的組織結構
- 掌握了多種使用命名空間的方法
- 學會了項目引用和命名空間導入

2. **值類型和引用類型**

- 理解了兩種類型的本質區別
- 掌握了內存存儲的不同方式
- 學會了通過醫療數據來理解類型特性

3. **字符串處理**

- 掌握了常用的字符串操作方法
- 學會了處理醫療記錄文本
- 理解了字符串的特殊性質

4. **繼承**

- 通過醫院員工體系理解繼承概念
- 掌握了繼承的特性和使用方法
- 學會了方法重寫和構造函數調用

5. **集合**

- 理解了不同集合類型的特點
- 掌握了集合的常用操作
- 學會了選擇合適的集合類型

6. **類型轉換**
- 掌握了各種類型轉換方法
- 學會了安全的類型轉換實踐
- 理解了類型轉換在醫療系統中的應用

這些概念將幫助我們構建更複雜的醫療信息系統功能。
Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2025/8/13

推薦一款高性能狀態機管理解決方案

在實際軟體開發中,尤其是工業軟體,每一款設備都有複雜的狀態以及狀態之間的切換的功能需求,在這種情況下,如何管理狀態以及狀態之間切換,和對應狀態下的功能控制,成為非常重要的一個問題。

继续阅读
同分类 / 同标签 2025/3/18

(7)從護士到c#開發者--面向對象編程基礎

作為一名從護理行業轉行的程式設計師,我將分享如何通過醫護工作經驗來理解面向對象編程的概念。本文將居間類、對象、屬性、方法等面向對象的核心概念,並結合醫療保健領域的實例來加深理解。

继续阅读
同分类 / 同标签 2025/2/25

net 10 preview 1發布

今天.net 10 preview 1發布了,我第一時間下載,升級了avalonia ui項目和博客網站,前者功能測試及aot發布正常,後者調試正常,docker暫時未成功

继续阅读