You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# get/set访问器仅返回属性原值未返回预期拼接文本的问题

问题描述

我尝试编写一个用于采集用户姓名、年龄、意向工作岗位的C#程序,将Employee类中的job字段设置为私有类型,希望通过get/set访问器返回「姓名+提示文本+实际岗位值」的拼接结果,但实际运行时仅返回输入的岗位原值,未得到预期的拼接内容,实现代码如下:

using System;

namespace Exercise_Project
{
    class Program
    {
        static void Main(string[] args)
        {
            //Apply for job application
            Console.Write("Enter your name: ");
            string name = Console.ReadLine();
            Console.Write("Enter how old are you: ");
            int age = Convert.ToInt32(Console.ReadLine());
            if (age < 18)
            {
                Console.WriteLine("You are too young to work!");
                Console.ReadKey();
            }
            else
            {
                Console.Write("Which job would you like to work: Programmer, Magician, Baker - ");
                string job = Console.ReadLine();
                Employee Person = new Employee(name, age, job);
                Console.WriteLine(Person.Job);

            }
            Console.ReadKey();
        }
    }
    class Employee
    {
        public string name;
        public int age;
        private string job;

        public Employee(string aName, int aAge, string aJob)
        {
            name = aName;
            age = aAge;
            job = aJob;
        }

        public string Job
        {
            get
            {
                return job;
            }
            set
            {
                if(value=="Programmer" || value== "Magician" || value == "Baker")
                {
                    job = name + ", welcome to your new job as " + value;
                }
                else
                {
                    job = name + ", you don't have a job!";
                }
            }
        }
    }
}
问题原因

你在Employee的构造函数中,直接对私有字段job赋值,完全绕过了Job属性的set访问器——你写的岗位拼接逻辑全在set块里,根本没有被执行,私有字段job里存的始终是构造函数传入的原始岗位字符串,get访问器自然只能返回原始输入值。

修复方案

修改Employee类的构造函数,不要直接给私有支撑字段job赋值,改为给公有属性Job赋值,让初始化流程自动触发set块里的拼接逻辑:

public Employee(string aName, int aAge, string aJob)
{
    name = aName;
    age = aAge;
    // 替换原有的 job = aJob;
    Job = aJob;
}

修改后重新运行,输入合法岗位时会输出[姓名], welcome to your new job as [岗位],输入不在可选范围内的岗位时会输出[姓名], you don't have a job!,和预期效果一致。

补充建议:name和age也建议改为封装了私有字段的属性,不要直接暴露公有字段,符合C#面向对象的封装规范。


内容的提问来源于stack exchange,提问作者Nikola Ivaniš

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 20:31:02