(6)看護師からC#開発者へ-基礎:プログラム制御とデータ構造

(6)看護師からC#開発者へ-基礎:プログラム制御とデータ構造

C#プログラミングの6日目には、ループ制御、三項式、定数、列挙、構造体、配列、メソッドなどを学びました。介護業界からのキャリア開発者として、私はこれらのプログラミングの概念と介護の仕事経験を組み合わせて、理解と記憶を深めました。

最后更新 2025/03/09 20:49
勇敢的天使
预计阅读 19 分钟
分类
共有する。 コースのコース
专题
看護師からC#開発者へ
标签
.NET C# 開発への移行 プログラミングプログラミング プログラム制御プログラム

前のページ

看護師からC#開発者になるための私の旅の6番目の学習ノートです。今日は、プログラム制御とデータ構造について学び、プログラム内のデータとプロセスをより良く整理し管理するのに役立ちました。

続きを読む:

Continue文は、今回のループを直ちに終了させ、ループ条件を判断し、成立すれば次のループに進み、そうでなければループを終了するために使用される。そこで看護の仕事では、あるステップが特定の患者に当てはまらない場合、そのステップをスキップしてケアプランの他の部分に進むということを思い出しました。

例を挙げてContinueの使い方を説明しましょう。

// 模拟病房巡视,跳过空床位
for (int bedNumber = 1; bedNumber <= 10; bedNumber++)
{
    // 假设4号床和7号床是空床位
    if (bedNumber == 4 || bedNumber == 7)
    {
        Console.WriteLine($"{bedNumber}号床是空床位,跳过检查");
        continue; // 跳过本次循环,直接进入下一次
    }

    // 执行病人检查流程
    Console.WriteLine($"正在检查{bedNumber}号床的病人");
    // 其他检查代码...
}

この例では、ループはベッド1から10までを通過し、空のベッド(4と7)に遭遇すると、continue文を使用して現在のループをスキップし、後続の患者検査プロセスを実行せずに、次のベッドの検査に進みます。

もう一つの例は、患者データの処理です。

// 处理患者体温数据,跳过无效数据
double[] temperatures = { 36.5, 37.2, 0, 36.8, 39.1, 0, 36.9 };
double sum = 0;
int validCount = 0;

for (int i = 0; i < temperatures.Length; i++)
{
    // 跳过记录为0的无效数据
    if (temperatures[i] == 0)
    {
        Console.WriteLine($"第{i+1}个体温数据无效,跳过");
        continue;
    }

    // 处理有效数据
    sum += temperatures[i];
    validCount++;
    Console.WriteLine($"记录有效体温: {temperatures[i]}°C");
}

// 计算平均体温
double average = sum / validCount;
Console.WriteLine($"患者平均体温: {average:F1}°C");

看護の仕事において、continueステートメントは、一連の標準的な看護操作を実行する際に、患者の特定の状況に応じて、適用できないステップをスキップして次のステップに進むことを決定するプロセスのようなものです。この柔軟性により、さまざまな状況に効率的に対応できます。

三項式

三元表达式的语法为:表达式1 ? 表达式2 : 表达式3

  • 式1は一般に関係式である。
  • 式1の値が真である場合、式2の値は三項式全体の値になります。
  • 式1の値がfalseの場合、式3の値は三項式全体の値になります。

式2の結果型は式3の結果型と一致しなければならず、三項式全体の結果型と一致しなければならないことに注意することが重要です。

いくつかの例を挙げて三項式の使い方を説明しましょう:

// 例1:根据体温判断是否发热
double temperature = 37.8;
string result = temperature >= 37.5 ? "患者发热" : "体温正常";
Console.WriteLine(result); // 输出:患者发热

上記の例は、以下のif-else文と等価です。

double temperature = 37.8;
string result;
if (temperature >= 37.5)
{
    result = "患者发热";
}
else
{
    result = "体温正常";
}
Console.WriteLine(result);

ご覧の通り、三項式はコードをより簡潔にします。

もう少し複雑な例を見てください:

// 例2:根据血压值返回不同的护理建议
int systolicBP = 145; // 收缩压
string advice = systolicBP >= 140 ?
                (systolicBP >= 180 ? "紧急处理,立即降压" : "需观察,按医嘱用药") :
                "血压正常,继续监测";
Console.WriteLine(advice); // 输出:需观察,按医嘱用药

この例では、複数の条件を処理するために入れ子のトリプル式を使用します。収縮期血圧が140を超えると、さらに180 以上の緊急状態に達したかどうかを判断します。

三項式は、値を評価するときにも便利です。

// 例3:计算药物剂量(根据体重)
double weight = 65.5; // 患者体重(kg)
double baseDose = 5.0; // 基础剂量(mg)
double doseMultiplier = weight < 50 ? 0.8 : (weight > 80 ? 1.2 : 1.0);
double finalDose = baseDose * doseMultiplier;

Console.WriteLine($"患者体重: {weight}kg");
Console.WriteLine($"剂量调整系数: {doseMultiplier}");
Console.WriteLine($"最终药物剂量: {finalDose}mg");

私の看護の仕事では、このような迅速な判断シナリオが一般的です。例えば、患者の指標に応じてケアのレベルを割り当てたり、評価結果に応じてどのような対策を講じるかを決定したりします。三項式は、これらの決定ロジックをコード内で簡潔に表現するのに役立ちます。

if-elseができることはすべて三項式で行うことができますが、ロジックが複雑すぎる場合は、コードの読みやすさのために従来のif-elseを使う方が明確かもしれません。

定数は

定数の宣言构文

const 变量类型 变量名 = 值

一度宣言された定数は再割り当てできません。看護においては、これは、正常体温範囲、血圧の標準値などのいくつかの固定医療パラメータに類似しています。

定数の使用例をいくつか挙げてみましょう:

// 定义医疗相关常量
const double NORMAL_BODY_TEMP = 36.5;      // 正常体温参考值
const int NORMAL_SYSTOLIC_BP = 120;        // 正常收缩压参考值
const int NORMAL_DIASTOLIC_BP = 80;        // 正常舒张压参考值
const int MIN_ADULT_HEART_RATE = 60;       // 成人最低心率
const int MAX_ADULT_HEART_RATE = 100;      // 成人最高心率
const string HOSPITAL_NAME = "仁爱医院";    // 医院名称

// 使用常量
double patientTemp = 38.2;
if (patientTemp > NORMAL_BODY_TEMP + 1.0)
{
    Console.WriteLine("患者体温明显升高,需要医生评估");
}

int patientSystolicBP = 135;
if (patientSystolicBP > NORMAL_SYSTOLIC_BP)
{
    Console.WriteLine("患者血压偏高");
}

Console.WriteLine($"欢迎来到{HOSPITAL_NAME}!");

定数の名前は、一般的な命名規則であるアンダースコアで区切られたすべての単語を大文字で指定します。

定期的な利点:

  1. コードの可読性向上-魔法の数字の代わりに意味のある名前を使用する(体温の代わりに36.5など)
  2. メンテナンスが容易-値を変更する必要がある場合は、定数定義を1か所だけ変更する必要があります。
  3. エラーの回避-コード内でこれらの値を誤って変更しないようにする

定数を再割り当てしようとすると、コンパイルエラーが発生します。

const int ADMISSION_AGE = 18;
ADMISSION_AGE = 16; // 编译错误:无法给常量赋值

私の看護の仕事では、バイタルサインの正常範囲、投薬量の上限、治療の標準的な流れなど、多くの固定基準と閾値があります。プログラミングで定数を使うことで、これらの医療基準を思い出し、概念をよりよく理解し、覚えるのに役立ちました。

列挙する

列挙は以下の構文で開発を標準化できます:

[public] enum 枚举名
{
    值1,
    值2,
    值3,
    ...
}

publicは、public、public、どこからでもアクセスできることを示すアクセス修飾子です。列挙名はPascal 命名規則に準拠する。列挙は名前空間の下、クラスの外側に宣言され、その名前空間の下のすべてのクラスが列挙を使用できることを示します。

列挙は本質的にint、double、string、decimalなどに似た変数型ですが、列挙は通常の変数型とは異なる方法で宣言、代入、使用されます。列挙型の変数をint型やstring型と変換できます。

医療シナリオの例を挙げて列挙の使用を説明しましょう。

// 定义护理评估中的疼痛等级枚举
public enum PainLevel
{
    None,           // 0 - 无疼痛
    Mild,           // 1 - 轻度疼痛
    Moderate,       // 2 - 中度疼痛
    Severe,         // 3 - 严重疼痛
    Unbearable      // 4 - 难以忍受的疼痛
}

// 定义护理任务优先级枚举
public enum NursingPriority
{
    Routine = 1,    // 常规护理
    Urgent = 2,     // 紧急护理
    Emergency = 3   // 危急情况
}

// 定义患者风险评估结果枚举
public enum RiskAssessment
{
    Low = 10,       // 低风险
    Medium = 20,    // 中等风险
    High = 30       // 高风险
}

// 在程序中使用枚举
class Program
{
    static void Main(string[] args)
    {
        // 1. 基本枚举使用
        PainLevel patientPain = PainLevel.Moderate;
        Console.WriteLine($"患者疼痛等级: {patientPain}"); // 输出: 患者疼痛等级: Moderate

        // 2. 根据疼痛等级确定护理优先级
        NursingPriority priority;
        if (patientPain >= PainLevel.Severe)
        {
            priority = NursingPriority.Urgent;
        }
        else if (patientPain == PainLevel.None)
        {
            priority = NursingPriority.Routine;
        }
        else
        {
            priority = NursingPriority.Routine;
        }

        Console.WriteLine($"护理优先级: {priority}"); // 输出: 护理优先级: Routine

        // 3. 使用枚举进行决策
        switch (patientPain)
        {
            case PainLevel.None:
                Console.WriteLine("无需止痛药物");
                break;
            case PainLevel.Mild:
                Console.WriteLine("考虑使用非处方止痛药");
                break;
            case PainLevel.Moderate:
                Console.WriteLine("按医嘱给予口服止痛药");
                break;
            case PainLevel.Severe:
            case PainLevel.Unbearable:
                Console.WriteLine("立即联系医生,考虑注射止痛药");
                break;
            default:
                Console.WriteLine("无效的疼痛评估");
                break;
        }

        // 4. 枚举与整数互相转换
        int painValue = (int)patientPain;
        Console.WriteLine($"疼痛数值: {painValue}"); // 输出: 疼痛数值: 2

        // 整数转换为枚举
        PainLevel convertedPain = (PainLevel)3;
        Console.WriteLine($"转换后的疼痛等级: {convertedPain}"); // 输出: 转换后的疼痛等级: Severe

        // 5. 枚举转换为字符串
        string painString = patientPain.ToString();
        Console.WriteLine($"疼痛描述: {painString}"); // 输出: 疼痛描述: Moderate

        // 6. 字符串转换为枚举
        PainLevel parsedPain = (PainLevel)Enum.Parse(typeof(PainLevel), "Mild");
        Console.WriteLine($"解析后的疼痛等级: {parsedPain}"); // 输出: 解析后的疼痛等级: Mild

        // 7. 尝试转换数字字符串
        PainLevel numericPain = (PainLevel)Enum.Parse(typeof(PainLevel), "1");
        Console.WriteLine($"数字解析的疼痛等级: {numericPain}"); // 输出: 数字解析的疼痛等级: Mild

        // 8. 处理可能发生的异常
        try
        {
            PainLevel invalidPain = (PainLevel)Enum.Parse(typeof(PainLevel), "Critical");
            Console.WriteLine($"解析结果: {invalidPain}");
        }
        catch (ArgumentException)
        {
            Console.WriteLine("无法将'Critical'转换为有效的疼痛等级,因为枚举中没有此值");
        }

        // 9. 获取枚举的所有可能值
        Console.WriteLine("所有可能的疼痛等级:");
        foreach (PainLevel level in Enum.GetValues(typeof(PainLevel)))
        {
            Console.WriteLine($"- {level} ({(int)level})");
        }
    }
}

この例では、以下を見ることができます:

  1. ** 列挙の定義 **:ケアに関連する3つの列挙タイプ(疼痛レベル、ケアの優先順位、リスク評価)を定義した。
  2. ** デフォルト値 ** 値を指定しない場合、列挙の最初のメンバーの値は0になり、それ以降のメンバーの値は1ずつ増加します。
  3. 自定义值:我们可以为枚举成员指定自定义的整数值,如NursingPriorityRiskAssessment
  4. ** 列挙比較 **:同じ列挙型の異なる値をより大きい演算子、等しい演算子などを使用して比較できます。
  5. ** 型変換 **:列挙はintとstringの両方で変換できます
  6. ** エラー処理 **:存在しない文字列を列挙値に変換しようとすると例外がスローされます

私の看護の仕事でも、似たような分類システムがあります。例えば:

  • 痛みの評価尺度(0-10点)
  • 圧迫創リスクスコア(Braden Scale)
  • 転倒リスクレベル
  • 静脈炎のグレード
  • 薬物の分類システム

列挙を使用すると、コードがより標準化され理解しやすくなり、“魔法の数字”(意味を示さずに1、2、3を直接使用するなど)を避けることができます。コンパイラーは列挙値の誤用を防ぐために型の安全性もチェックします。

構造は

構造体は一度に複数の異なる型の変数を宣言するのに役立ちます。通常は名前空間の下に書かれます。文法は以下の通り。

[public] struct 结构名(符合Pascal)
{
    成员; //字段
}

プログラムの実行中に1つの値しか保持できない変数とは異なり、構造体は複数の値を保持できます。看護シナリオの例を挙げて、構造の使い方を説明しましょう。

// 定义患者生命体征结构
public struct VitalSigns
{
    public double Temperature;      // 体温
    public int HeartRate;          // 心率
    public int SystolicBP;         // 收缩压
    public int DiastolicBP;        // 舒张压
    public int RespiratoryRate;    // 呼吸频率
    public int OxygenSaturation;   // 血氧饱和度
}

// 定义患者基本信息结构
public struct PatientInfo
{
    public string Name;            // 姓名
    public int Age;                // 年龄
    public char Gender;            // 性别('M' 或 'F')
    public string ID;              // 病历号
    public string Ward;            // 病区
    public int BedNumber;          // 床号
    public VitalSigns Vitals;      // 生命体征
}

// 使用结构的示例
class Program
{
    static void Main(string[] args)
    {
        // 创建并初始化一个患者信息
        PatientInfo patient;
        patient.Name = "张三";
        patient.Age = 45;
        patient.Gender = 'M';
        patient.ID = "P20250305001";
        patient.Ward = "内科";
        patient.BedNumber = 12;

        // 设置患者生命体征
        patient.Vitals.Temperature = 37.2;
        patient.Vitals.HeartRate = 78;
        patient.Vitals.SystolicBP = 130;
        patient.Vitals.DiastolicBP = 85;
        patient.Vitals.RespiratoryRate = 16;
        patient.Vitals.OxygenSaturation = 98;

        // 显示患者信息
        DisplayPatientInfo(patient);

        // 评估生命体征
        AssessVitalSigns(patient.Vitals);
    }

    // 显示患者信息的方法
    static void DisplayPatientInfo(PatientInfo patient)
    {
        Console.WriteLine("患者基本信息:");
        Console.WriteLine($"姓名: {patient.Name}");
        Console.WriteLine($"年龄: {patient.Age}岁");
        Console.WriteLine($"性别: {(patient.Gender == 'M' ? "男" : "女")}");
        Console.WriteLine($"病历号: {patient.ID}");
        Console.WriteLine($"病区: {patient.Ward}");
        Console.WriteLine($"床号: {patient.BedNumber}号");
        Console.WriteLine("\n生命体征:");
        Console.WriteLine($"体温: {patient.Vitals.Temperature}°C");
        Console.WriteLine($"心率: {patient.Vitals.HeartRate}次/分");
        Console.WriteLine($"血压: {patient.Vitals.SystolicBP}/{patient.Vitals.DiastolicBP} mmHg");
        Console.WriteLine($"呼吸: {patient.Vitals.RespiratoryRate}次/分");
        Console.WriteLine($"血氧: {patient.Vitals.OxygenSaturation}%");
    }

    // 评估生命体征的方法
    static void AssessVitalSigns(VitalSigns vitals)
    {
        Console.WriteLine("\n生命体征评估:");

        // 评估体温
        if (vitals.Temperature > 37.5)
            Console.WriteLine("- 体温偏高,需要监测");

        // 评估心率
        if (vitals.HeartRate < 60 || vitals.HeartRate > 100)
            Console.WriteLine("- 心率异常,需要关注");

        // 评估血压
        if (vitals.SystolicBP >= 140 || vitals.DiastolicBP >= 90)
            Console.WriteLine("- 血压偏高,建议复查");

        // 评估呼吸
        if (vitals.RespiratoryRate < 12 || vitals.RespiratoryRate > 20)
            Console.WriteLine("- 呼吸频率异常,需要观察");

        // 评估血氧
        if (vitals.OxygenSaturation < 95)
            Console.WriteLine("- 血氧偏低,考虑给氧");
    }
}

この例では、以下を見ることができます:

  1. 结构的定义:我们定义了两个结构(VitalSignsPatientInfo),用于存储患者的相关信息
  2. 结构的嵌套PatientInfo结构中包含了VitalSigns结构,展示了结构的嵌套使用
  3. ** 構造体の初期化**:構造体変数の作成方法とフィールド値の設定方法を示します。
  4. ** パラメータとしての構造体 **:メソッドパラメータとして構造体を渡す方法を示します。
  5. ** 構造物の実用化 **:バイタルサインを評価する手法により、実際のシナリオでの構造物の応用を実証する。

このようなデータの整理方法は、看護の医療記録システムを思い出させます。また、患者さんに関するさまざまな情報(基本情報、バイタルサイン、検査結果など)を、特定の形式で整理しています。構造を使用することで、関連するデータをより良く管理し、コードをより整理し保守しやすくすることができます。

グループのメンバー。

配列は、同じ型の複数の変数を一度に格納できます。文法:

数组类型[] 数组名 = new 数组类型[数组长度]

例如:int[] nums = new int[10];

私が上記の行を書いたとき、メモリに連続して10ブロックのスペースが開かれました。各空間を配列の要素と呼びます。配列内の要素にアクセスしたい場合は、要素の添字またはインデックスを使用してアクセスする必要があります。配列の最後の要素のインデックスは、長さから1を引いたものです。

看護の仕事の例をいくつか挙げてみましょう:

// 例1:记录一周的病房人数
int[] wardPatients = new int[7];  // 创建长度为7的数组

// 设置每天的病人数量
wardPatients[0] = 45;  // 星期一
wardPatients[1] = 42;  // 星期二
wardPatients[2] = 48;  // 星期三
wardPatients[3] = 50;  // 星期四
wardPatients[4] = 47;  // 星期五
wardPatients[5] = 40;  // 星期六
wardPatients[6] = 38;  // 星期日

// 计算平均住院人数
int totalPatients = 0;
for (int i = 0; i < wardPatients.Length; i++)
{
    totalPatients += wardPatients[i];
}
double averagePatients = (double)totalPatients / wardPatients.Length;
Console.WriteLine($"本周平均住院人数: {averagePatients:F1}人");

// 例2:数组的初始化方式
// 方式1:直接初始化
double[] temperatures = { 36.5, 36.8, 37.2, 36.9, 37.0 };

// 方式2:new关键字初始化
string[] medications = new string[] { "青霉素", "头孢", "阿莫西林", "布洛芬" };

// 方式3:先声明后赋值
int[] bedNumbers;
bedNumbers = new int[] { 101, 102, 103, 104, 105 };

// 例3:二维数组 - 记录多个病人一天的体温记录
double[,] patientTemps = new double[3, 4];  // 3个病人,每天4次体温记录

// 设置体温数据
patientTemps[0, 0] = 36.5;  // 1号病人早上
patientTemps[0, 1] = 36.8;  // 1号病人中午
patientTemps[0, 2] = 37.1;  // 1号病人下午
patientTemps[0, 3] = 36.9;  // 1号病人晚上

// 遍历二维数组
string[] timeSlots = { "早上", "中午", "下午", "晚上" };
for (int patient = 0; patient < 3; patient++)
{
    Console.WriteLine($"\n{patient + 1}号病人的体温记录:");
    for (int time = 0; time < 4; time++)
    {
        Console.WriteLine($"{timeSlots[time]}: {patientTemps[patient, time]}°C");
    }
}

// 例4:数组作为方法参数
static double CalculateAverageTemp(double[] temps)
{
    double sum = 0;
    foreach (double temp in temps)
    {
        sum += temp;
    }
    return sum / temps.Length;
}

// 调用方法
double[] patient1Temps = { 36.5, 36.8, 37.2, 36.9 };
double avgTemp = CalculateAverageTemp(patient1Temps);
Console.WriteLine($"患者平均体温: {avgTemp:F1}°C");

// 例5:数组的常见操作
string[] nurses = { "张护士", "李护士", "王护士", "赵护士" };

// 获取数组长度
Console.WriteLine($"护士数量: {nurses.Length}");

// 查找元素
string searchNurse = "李护士";
bool found = Array.IndexOf(nurses, searchNurse) != -1;
Console.WriteLine($"是否找到{searchNurse}: {found}");

// 数组排序
Array.Sort(nurses);
Console.WriteLine("排序后的护士名单:");
foreach (string nurse in nurses)
{
    Console.WriteLine(nurse);
}

// 数组复制
string[] backupNurses = new string[nurses.Length];
Array.Copy(nurses, backupNurses, nurses.Length);

これらの例で見ることができます:

  1. ** 配列の作成 **:配列を作成および初期化する方法はいくつかあります。
  2. ** 配列へのアクセス **:インデックスを介して配列要素にアクセスする
  3. ** 配列の反復 **:forループまたはforeachループを使用して配列を反復する
  4. ** 2次元配列 **:より複雑なデータ構造を格納するためのもの
  5. ** パラメータとしての配列 **:配列はメソッドのパラメータとして渡すことができます。
  6. ** 配列の一般的な操作:長さの取得、要素の検索、ソート、コピーなど

配列の長さは一度固定されると変更できません。そこで、病院における医薬品流通システムを考えました。各医薬品には一定の保管場所と数量があります。看護の仕事では、次のような関連するデータセットを扱う必要があります。

  • 病室のベッド番号
  • 患者さんの体温記録
  • 薬のリスト
  • 介護シフトの手配
  • バイタルサイン監視データ

配列を使用することで、このデータを効率的に整理·管理でき、プログラムがより構造化され、メンテナンスが容易になります。

バブルソート

バブリングソートは、配列内の要素を大きい順、または小さい順に並べるために使用されます。例えば、グループの場合:

int[] nums = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};

以下は、患者を優先順位付けするバブルソートの完全な例です。

// 患者优先级数组(数字越大优先级越高)
int[] priorities = { 2, 5, 1, 7, 3, 8, 4, 6 };
string[] patientNames = { "张三", "李四", "王五", "赵六", "钱七", "孙八", "周九", "吴十" };

Console.WriteLine("排序前的患者优先级:");
for (int i = 0; i < priorities.Length; i++)
{
    Console.WriteLine($"{patientNames[i]}: 优先级 {priorities[i]}");
}

// 冒泡排序(从高到低)
for (int i = 0; i < priorities.Length - 1; i++)
{
    for (int j = 0; j < priorities.Length - 1 - i; j++)
    {
        // 如果当前元素小于下一个元素,交换位置(降序排列)
        if (priorities[j] < priorities[j + 1])
        {
            // 交换优先级
            int tempPriority = priorities[j];
            priorities[j] = priorities[j + 1];
            priorities[j + 1] = tempPriority;

            // 同时交换对应的患者姓名
            string tempName = patientNames[j];
            patientNames[j] = patientNames[j + 1];
            patientNames[j + 1] = tempName;
        }
    }
}

Console.WriteLine("\n排序后的患者优先级(从高到低):");
for (int i = 0; i < priorities.Length; i++)
{
    Console.WriteLine($"{i+1}. {patientNames[i]}: 优先级 {priorities[i]}");
}

これは、ケアの優先順位に従って患者をトリアージし治療することに似ています。バブルソートという考え方は、看護ステーションで患者の重症度に応じてどの患者を最初に治療するかを連想させます。

方法論は

メソッドは、コードの束を再利用するためのメカニズムです。文法は以下の通り。

[public] static 返回值类型 方法名([参数列表])
{
    方法体;
}

看護関連の例をいくつか挙げてみましょう。

class NursingProgram
{
    // 1. 无参数无返回值的方法
    public static void DisplayNursingProtocol()
    {
        Console.WriteLine("标准护理流程:");
        Console.WriteLine("1. 测量生命体征");
        Console.WriteLine("2. 检查输液情况");
        Console.WriteLine("3. 观察病情变化");
        Console.WriteLine("4. 记录护理记录");
    }

    // 2. 有参数有返回值的方法
    public static double CalculateIdealWeight(double height, char gender)
    {
        // 根据身高和性别计算理想体重
        if (gender == 'M' || gender == 'm')
        {
            return (height - 100) * 0.9;
        }
        else
        {
            return (height - 100) * 0.85;
        }
    }

    // 3. 多参数的方法
    public static double CalculateBMI(double weight, double height)
    {
        double heightInMeters = height / 100;
        return weight / (heightInMeters * heightInMeters);
    }

    // 4. 方法重载 - 评估体温
    public static string EvaluateTemperature(double temperature)
    {
        if (temperature < 35.5) return "低温";
        if (temperature <= 37.2) return "正常";
        if (temperature <= 38.0) return "低热";
        if (temperature <= 39.0) return "中度发热";
        return "高热";
    }

    // 同名方法,但参数不同
    public static string EvaluateTemperature(double temperature, bool isInfant)
    {
        if (isInfant)
        {
            // 婴儿体温标准略有不同
            if (temperature < 36.0) return "婴儿低温";
            if (temperature <= 37.5) return "婴儿正常体温";
            if (temperature <= 38.5) return "婴儿低热";
            return "婴儿高热";
        }
        else
        {
            return EvaluateTemperature(temperature); // 调用另一个重载方法
        }
    }

    // 5. 参数默认值
    public static string AssessBloodPressure(int systolic, int diastolic, bool detailed = false)
    {
        string result = "";
        if (systolic >= 140 || diastolic >= 90)
        {
            result = "血压偏高";
            if (detailed)
            {
                result += $" (收缩压:{systolic}, 舒张压:{diastolic})";
            }
        }
        else if (systolic < 90 || diastolic < 60)
        {
            result = "血压偏低";
            if (detailed)
            {
                result += $" (收缩压:{systolic}, 舒张压:{diastolic})";
            }
        }
        else
        {
            result = "血压正常";
        }
        return result;
    }

    // 6. 使用ref参数的方法
    public static void UpdateVitalSigns(ref double temperature, ref int pulse)
    {
        // 模拟新的测量值
        temperature = 37.2;
        pulse = 75;
    }

    // 主方法中使用这些方法
    static void Main(string[] args)
    {
        // 调用无参数方法
        DisplayNursingProtocol();

        // 计算理想体重
        double height = 170;
        char gender = 'F';
        double idealWeight = CalculateIdealWeight(height, gender);
        Console.WriteLine($"\n身高{height}cm的{(gender == 'F' ? "女" : "男")}性理想体重: {idealWeight:F1}kg");

        // 计算BMI
        double weight = 65;
        double bmi = CalculateBMI(weight, height);
        Console.WriteLine($"BMI指数: {bmi:F1}");

        // 使用方法重载评估体温
        double adultTemp = 38.5;
        double infantTemp = 37.8;
        Console.WriteLine($"\n成人体温{adultTemp}°C评估: {EvaluateTemperature(adultTemp)}");
        Console.WriteLine($"婴儿体温{infantTemp}°C评估: {EvaluateTemperature(infantTemp, true)}");

        // 使用默认参数
        int systolic = 145;
        int diastolic = 88;
        Console.WriteLine($"\n血压评估: {AssessBloodPressure(systolic, diastolic)}");
        Console.WriteLine($"血压评估(详细): {AssessBloodPressure(systolic, diastolic, true)}");

        // 使用ref参数
        double temp = 36.8;
        int pulse = 80;
        Console.WriteLine($"\n更新前 - 体温: {temp}°C, 脉搏: {pulse}次/分");
        UpdateVitalSigns(ref temp, ref pulse);
        Console.WriteLine($"更新后 - 体温: {temp}°C, 脉搏: {pulse}次/分");
    }
}

これらの例で見ることができます:

  1. 无参数方法DisplayNursingProtocol()展示了如何定义和使用无参数方法
  2. 有参数和返回值的方法CalculateIdealWeight()CalculateBMI()展示了如何处理输入参数并返回计算结果
  3. 方法重载EvaluateTemperature()展示了如何为同一个方法名提供不同的参数版本
  4. 默认参数AssessBloodPressure()展示了如何使用可选参数
  5. 引用参数UpdateVitalSigns()展示了如何使用 ref 参数在方法中修改变量的值

これらのアプローチは、看護業務における標準的な運用手順(SOP)を思い出させます。

  • 各ケア手順には、明確な入力(例:患者の状態)とアウトプット(例:ケア措置)があります。
  • 同じケア手順でも、患者のタイプ(大人と子供など)によって異なるバリエーションがあります。
  • 特定のケア操作は、患者の状態を直接変えることができます(例えば、投薬)。
  • ケアアセスメントには簡易バージョンと詳細バージョンがあります。

方法論を看護の実践に結びつけることで、プログラミングの概念を理解し、覚えやすくなりました。このアプローチにより、標準化されたケアプロセスと同様に、コードをより組織化し、効率と精度を向上させました。

return文{{returnぶん}}

return文には2つの役割がある。

  1. メソッドで返す値を返す
  2. 本方法の即時終了

return文の使用例を以下に示します。

// 评估患者体温状态并给出护理建议
static string EvaluateTemperature(double temperature)
{
    // 低温
    if (temperature < 35.5)
    {
        return "体温过低,需保暖并监测";
    }

    // 正常体温
    if (temperature >= 35.5 && temperature <= 37.2)
    {
        return "体温正常,定时监测";
    }

    // 轻度发热
    if (temperature > 37.2 && temperature <= 38.0)
    {
        return "轻度发热,密切观察";
    }

    // 中度发热
    if (temperature > 38.0 && temperature <= 39.0)
    {
        return "中度发热,物理降温并考虑用药";
    }

    // 高热
    return "高热,紧急处理,立即通知医生";
}

// 在Main方法中调用
static void Main(string[] args)
{
    double[] patientTemps = { 36.5, 37.8, 39.2, 35.0, 38.5 };

    foreach (double temp in patientTemps)
    {
        string advice = EvaluateTemperature(temp);
        Console.WriteLine($"体温 {temp}°C: {advice}");
    }
}

この例では、条件が満たされると、return文は対応するアドバイスを返し、後続の条件をチェックすることなく、直ちにメソッドの実行を終了します。これは、患者の状態が特定されると、他の可能性を考慮せずに即座に対応するケアの意思決定に似ています。

まとめまとめまとめ

看護師転職の開発者として、プログラミングと看護の仕事には多くの類似点があります。これらのプログラミングの概念を看護の経験に結びつけることで、私はこの知識をよりよく理解し、応用し、優れたC#開発者に成長することができました。

Keep Exploring

延伸阅读

更多文章
同标签 2026/04/22

バージョン別の. NETサポート状況(250 7 0 7更新)

仮想マシンとテストマシンを使用して、各バージョンのオペレーティングシステムの. NETサポートをテストします。オペレーティングシステムのインストール後、対応するランタイムを測定し、スターダストエージェントをパスとして実行できます。

继续阅读
同标签 2026/02/07

AOTの使用経験

プロジェクトの最初から、新しい機能が追加されたり、新しい構文が使用されたりするたびに、AOTリリーステストを行うという良い習慣を身につける必要があります。

继续阅读