数据成员 ≠ 属性 = 成员属性

属性可以理解为一种封装

  1. 成员属性概念:一般是用来保护成员变量的

  2. 成员属性的使用和变量一样,外部用对象点出

  3. get中需要return内容 ; set中用value表示传入的内容

  4. get和set语句块中可以加逻辑处理。应用:加密解密

  5. get和set可以加访问修饰符,但是要按照一定的规则进行添加

  6. get和set可以只有一个

  7. 自动属性是属性语句块中只有get和set,一 般用于 外部能得不能改

一:属性的语法规则

1.1 使用常规方法对字段进行封装

class Student
{
    private int age;
    public void SetAge(int age) 
      { this.age=age;}
    public int GetAge()
      { return age;}
}
-----------------------
Main()
{
    Student a1=new Student();
    a1.SetAge(17);
    Console.WriteLine(a1.GetAge());
}

1.2 使用属性对字段进行封装 

属性命名:一般使用帕斯卡命名(首字母大写)

1.2.1 属性的完整写法
public class Person
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set { _name = value; }
    }
}
---------
//属性的使用
void Main(){
    Person p = new Person();
    p.Name="小白";//调用set逻辑
    Console.WriteLine(p.Name);//调用get逻辑
}

 一般需要配置一个私有的字段,并在属性的 get 和 set 访问器中添加自定义逻辑

1.2.2 自动属性
public class Person
{
    public string Name { get; set; }
}

系统会自动生成一个私有的返回字段 

1.2.3 只读属性
public class Person
{
    public string Name { get; private set; }
}

 只能被读取,不能被外部代码修改

1.2.4 表达式属性

C# 6 引入了表达式成员,允许使用一行代码定义属性。

public class Person
{
    public string Name => "John";
}
1.2.5 有逻辑的属性

可以在get,set语句块中增加逻辑,如验证、记录、计算等

public class Person
{
    private int _age;
    public int Age
    {
        get { return _age; }
        set
        {
            if (value < 0)
                return -1;
            _age = value;
        }
    }
}

二:属性的访问权限

不能同时让set和get的访问修饰符与外部的访问修饰符不同 。

不能外部private而内部是public

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部