c#字段,属性,索引器,常量

c#类成员

◆常量 与类关联的常量值
◆字段 类的变量
◆方法 类可执行的计算和操作
◆属性 与读写类的命名属性相关联的操作
◆索引器 与以数组方式索引类的实例相关联的操作
◆事件 可由类生成的通知
◆运算符 类所支持的转换和表达式运算符
◆构造函数 初始化类的实例或类本身所需的操作
◆析构函数 在永久丢弃类的实例之前执行的操作
◆类型 类所声明的嵌套类型

字段

字段

什么是字段

◆字段field是一种表示与对象或类型(类与结构体)关联的变量
◆字段是类型的成员,旧称“成员变量”
◆与对象关联的字段亦称为“实例字段”
◆与类型关联的字段称为“静态字段”,由static修饰。

字段的声明

◆尽管字段声明带有分号但它不是语句
◆字段的名字一定是名词

字段的初始化

◆无显式初始化时,字段获得其类型的默认值,所以字段永远不会未被初始化。
◆实例字段初始化的时机是在对象创建时
◆静态字段初始化的时机是在类型被加载load时

只读字段

◆实例只读字段
◆静态只读字段

using System;
using System.Collections.Generic;

namespace Test
{
    class User
    {
        //只读实例字段
        public readonly int ID;
        //实例字段
        public int Age;
        public int Score;
        //静态字段
        public static int AverageAge;
        public static int AverageScore;
        public static int Amount;
        //构造函数
        public User(int id)
        {
            this.ID = id;//只读字段只能在实例化时初始化,且不能赋值。
            User.Amount++;
        }
        //静态方法
        public static void ReportAmount()
        {
            Console.WriteLine(User.Amount);
        }
        public static void ReportAge()
        {
            Console.WriteLine(User.AverageAge);
        }
        public static void ReportScore()
        {
            Console.WriteLine(User.AverageScore);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<User> userlist = new List<User>();
            for(int i=0; i<100; i++)
            {
                User user = new User(i);
                user.Age = i;
                user.Score = i;
                userlist.Add(user);
            }

            int totalAge = 0;
            int totalScore = 0;
            foreach(var user in userlist)
            {
                totalAge += user.Age;
                totalScore += user.Score;
            }

            User.AverageAge = totalAge / User.Amount;
            User.AverageScore = totalScore / User.Amount;

            //静态变量
            User.ReportAmount();
            User.ReportAge();
            User.ReportScore();

            Console.ReadKey();
        }
    }
}

属性

属性

什么是属性

◆属性property是一种用于访问对象或类型的特征的成员,特征反映了状态。
◆属性是字段的自然扩展
从命名上看field字段更加偏向于实例对象在内存中的布局,property属性更加偏向于反映现实世界对象的特征。
属性对外暴露数据,数据可以是存储在字段里的,也可以是动态计算出来的。
属性对内则保护字段不被非法值污染
◆属性由get和set方法进化而来

属性的声明

◆属性完整的声明 - 后台成员变量与访问器
◆属性简略声明 - 只有访问器
◆动态计算值的属性
◆注意实例属性和静态属性
◆属性的名字一定是名词
◆只读属性即只有getter而没有setter方法
尽管语法上正确,几乎没有人使用只写属性,因为属性的主要目的是通过向外暴露数据而表示对象或类型的状态。
VS2017中书写属性的,类中键入propfull后连续按两下Tab键,即可快速书写setter和getter方法。

属性与字段的关系

一般情况下,属性和字段都用于表示实体(对象或类型)的状态
属性大多数情况下是字段的包装器wrapper

建议永远使用属性而非字段来暴露数据,即字段永远都是private或protected的。

using System;

namespace Test
{
    class User
    {
        //属性 
        private int age;
        public int Age {
            get
            {
                return this.age;
            }
            set
            {
                if (value >= 0 && value <= 120)
                {
                    this.age = value;
                }
                else
                {
                    throw new Exception("Age value has error");
                }
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                User user1 = new User();
                user1.Age = 20;
                User user2 = new User();
                user2.Age = 200;
                int avgAge = (user1.Age + user2.Age) / 2;
                Console.WriteLine(avgAge);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            Console.ReadKey();
        }
    }
}

索引器

索引器

什么是索引器

索引器(indexer)是一种成员:使对象能够用与数组相同的方式即是用下标进行索引

索引器的声明

注意:没有静态索引器

常量

常量

什么是常量

常量constant是表示常量值,即可以在编译时计算的值的类成员。
常量隶属于类型而非对象,即没有实例常量。实例常量的角色由只读实例来担当。
注意区分成员常量与局部常量

常量的声明

各种只读的应用场景

为了提高程序可读性和执行效率 - 常量
为了防止对象的值被改变 - 只读字段
向外暴露不允许修改的数据 - 只读属性(静态或非静态),功能与常量有些重叠。
当希望成为常量的值其类型不能被常量声明接受时(类或自定义结构体) - 静态只读字段

C#语言入门详解(017) 字段、属性、索引器、常量:https://www.bilibili.com/video/av18906269?t=4734
https://www.cnblogs.com/tangbuchi/p/10105669.html
C#类成员:https://www.jianshu.com/p/a88dce067fa3

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,746评论 2 9
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,096评论 1 32
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,304评论 0 9
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 10,951评论 6 13
  • “人都是逼出来的”。每个人都是有潜能的,生于安乐,死于忧患,所以,当面对压力的时候,不要焦燥,也许这只是生活对你的...
    九洋阅读 91评论 0 0