C# 属性


快速生成属性的方法:输入propfull,按两下tab键,然后再按tab键一次修改有底纹的字段,字段myVar的名称改变后,get、set 中会自动更新。
其中: value是上下文关键字,代表用户传过来的值。
默认生成的属性格式比较简单,如下图,实际上为了防止污染字段值,可以在set中对用户传过来的值value进行判断,即丰富 set的代码块。
图1
生成简单属性,仅用来传输数据,即输入 prop,按两下tap键。
在这里插入图片描述

实例属性

using System;

namespace PropAppl
{
    public class Executer
    {
        static void Main(string[] args)
        {
            try
            {
                Person p = new Person();
                p.Age = 1;
                Console.WriteLine(p.Age);
                Person p2 = new Person();
                p2.Age = 100;
                Console.WriteLine(p2.Age);
            }catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
        }
    }

    class Person
    {
        private int age;

        public int Age
        {
            get { return age; }
            set 
            {
                if (value >= 0 && value <= 90)
                    this.age = value;
                else
                    throw new Exception("Age is error!");
            }
        }

    }
   
}

运行结果:
值正常,即正常输出,否则 异常打印出来。
在这里插入图片描述

静态属性

using System;

namespace PropAppl
{
    public class Executer
    {
        static void Main(string[] args)
        {
            try
            {
               Person.Amount = 100;
                Console.WriteLine(Person.Amount);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

        }
    }

    class Person
    {
        private static  int amount;

        public static  int Amount
        {
            get { return amount; }
            set 
            {
                if (value >= 0)
                    amount = value;
                else
                    throw new Exception("Amount is error");
            }
        }
    }
   
}

运行结果,输入100.

当 Person.Amount = -100;
在这里插入图片描述

只读属性:

只有get,没有set—很少使用,因为属性的主要目的是通过向外暴露数据而表示对象或者类型的状态 ;

内部只读属性:

即 private set{}

动态计算值的属性

CanWork的值,由Age的值影响,而动态生成,有两种方式。以下展示的两种方法的计算的结果一致。Mian函数中的程序主体也没有发生变化。因为只是改变了内部的实现。
主动计算:设定Age即计算。
被动计算:访问的时候才计算。
具体选择哪种方式,根据属性的调用频率。如果CanWork被调用的很频繁,那就可以选择第一种的主动计算方式,每次设定了年龄值,就将CanWork计算出来。如果Age调用的很频繁,这两种方式设计的就不是很合理了。因为CanWork的大量计算,浪费了计算性能。

方式一:主动计算

using System;

namespace PropAppl
{
    public class Executer
    {
        static void Main(string[] args)
        {
            try
            {
                Person p = new Person();
                p.Age = 10;
                Console.WriteLine(p.CanWork);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

        }
    }

    class Person
    {
        private int age;

        public int Age
        {
            get { return age; }
            set
            {
                if (value >= 0 && value <= 90)
                    this.age = value;
                else
                    throw new Exception("Age is error!");
            }
        }

        public bool CanWork
        {
            get
            {
                if (this.age >= 16)
                    return true;
                else
                    return false;
            }
        }
    } 
}


在这里插入图片描述

方式二:被动计算

访问的时候才计算

using System;

namespace PropAppl
{
    public class Executer
    {
        static void Main(string[] args)
        {
            try
            {
                Person p = new Person();
                p.Age = 10;
                Console.WriteLine(p.CanWork);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

        }
    }

    class Person
    {
        private int age;

        public int Age
        {
            get { return age; }
            set
            {
                if (value >= 0 && value <= 90)
                {
                    age = value;
                    this.CaculateCanWork();
                }   
                else
                    throw new Exception("Age is error!");
            }
        }

        private bool canWork;

        public bool CanWork
        {
            get { return canWork; }
            
        }

        public void CaculateCanWork()
        {
            if (this.age >= 16)
                this.canWork = true;
            else
                this.canWork = false;
            
        }
    } 
}


与方式一的运行结果一致。

参考视频:刘铁猛 C# 教程第17讲 字段 属性 索引器 常量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值