属性在调用者看来就像一个普通的变量,但作为类的设计者,你可以利用属性来隐藏你类中的一些字段,使外界只能通过属性来访问你的字段,你可以通过属性来限制外界对你的字段的存取,就利用get、set。如果想让用户随意存取你的字段,那么就实现get、set;如果只想让用户读取字段,就只实现get;若只想让用户写字段就只实现set。同时还可以在set和get中对用户传递的值进行一些验证工作,以确保你的字段将含有正确的值。
get和set虽然也是两个方法,但是这次只用这两个来解决兔子问题
private int num = 0; public int Num { get { if (num == 1 || num == 2) return 1; int n = num; int nn =0; Num = n - 1; nn += Num; Num = n - 2; nn += Num; num = n; return nn; } set { num = value; } } static void Main(string[] args) { Program program = new Program(); for (int i = 1; i <= 10; i++) { program.Num = i; Console.Write($"{program.Num} "); } }
实现其实还是递归,但是是通过get方法实现,加上get
,set用起来比较特殊,看着很牛逼实则没卵用
我对属性的理解就是在
=左边触发set方法
=右边触发get方法
private int num = 0; public int Num { get { if (num == 1 || num == 2) return 1; return (Num = num - 1) + (Num = num - 2); } set { num = value; } }
我刚开始是这样写,发现set方法不会触发