新手初学C# ,第一次上高大上的 CSDN论坛提问,不知道有没有大神愿意给看一下,有一个隐性的bug

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _01面向对象
{
class Program
{
static void Main(string[] args)
{

        //创建 Person类的对象
        Person suQuan = new Person();
        suQuan.Name = "貂蝉";
        suQuan.Age = 16;
        suQuan.Gender = '春';    //18行代码
        suQuan.CHLSS();
        Console.ReadKey();
    }
}

public class Person
{
    private string _name;
    public string Name
    {
        get { return _name;}    //当你输出属性的值的时候,会执行get方法
        set { _name = value;}   //当你给属性赋值的时候,首先会执行set方法
    }

    private int _age;
    public int Age
    {
        get { return _age; }
        set {
            if (value < 0 || value > 100)
            {
                value = 0;
            }
            _age = value; 
        }
    }

    private char _gender;
    public char Gender
    {

        get {
                if (_gender!= '男'&& _gender!= '女')
                {
                   return _gender = '女';    //这行代码貌似有问题,它会给 Gender属性自动赋初值,导致第18行代码失效,不知这是问什么?
                }

                return _gender;
           }
        set { _gender = value; }

    }

    public void CHLSS()
    {
        Console.WriteLine("我叫{0},我今年{1}岁了,我是{2}生,我可以天天向上呦~~",this.Name ,this.Age ,this.Gender );
    }
}

}

你的问题是什么,按照你这个写法,如果给Gender传男以外的字,都返回女。如果你要返回实际上传入的字,那么去掉判断,就可以了。

你使用=对类中的一个属性赋值的时候,会调用属性的get和set方法,并不是只调用set方法,你这样写,在get方法中就一定会将_genderf赋值为“女”啊