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赋值为“女”啊