当前位置: 首页 > article >正文

C#-类:成员属性

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

属性可以理解为一种封装

  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


http://www.kler.cn/a/386428.html

相关文章:

  • Redo与Undo的区别:数据库事务的恢复与撤销机制
  • JAVA:探索 EasyExcel 的技术指南
  • Django基础用法+Demo演示
  • quartz
  • vwmare虚拟机繁忙的解决办法
  • 前端Cypress自动化测试全网详解
  • 【日志】392.判断子序列
  • 基于SSM+VUE儿童接种疫苗预约管理系统JAVA|VUE|Springboot计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解
  • 家庭宽带如何开启公网ipv4和ipv6
  • 基于SpringBoot的城镇住房保障系统性能优化
  • 设计模式-七个基本原则之一-开闭原则 + SpringBoot案例
  • Leetcode 同构字符串
  • 美团代付微信小程序系统 read.php 任意文件读取漏洞复现
  • # SpringMVC学习
  • nginx代理出现的请求头中获取不到acc_token问题
  • 从零开始训练一个大语言模型需要多少天?
  • Python学习从0到1 day26 第三阶段 Spark ① 数据输入
  • 论文阅读(三十五):Boundary-guided network for camouflaged object detection
  • 设置JAVA以适配华为2288HV2服务器的KVM控制台
  • 游戏中Dubbo类的RPC设计时的注意要点
  • 2024系统架构师---上午综合题真题(重复考试知识难点)
  • 【LeetCode】【算法】279. 完全平方数
  • 【GeoJSON在线编辑平台】(1)创建地图+要素绘制+折点编辑+拖拽移动
  • 图像格式中的 stride 和 pix stide
  • SDL 播放PCM
  • 国内读新加坡公立大学在职博士是一种怎样的体验?还中文授课