C#中字段(field)、属性(property)、索引器(index)以及
常量(const)
⼀个程序的本质就是”数据+算法“,以下四种成员均是⽤来表⽰”数据“。
字段(field):
1,什么是字段(field)
(1)字段(field)是⼀种表⽰与对象或类型(类与结构体)关联的变量
字段的本质是⼀种变量,作⽤是⽤来存储数据的,字段是为⼀个对象或者类型存储数据的。和⽅法体中的局部变量不同,⽅法体中的局部变量是⽅法运⾏时,帮助其⽅法暂时地存储数据,⽽字段帮助对象或类型存储数据。当⼀个对象或类型拥有多个字段的时候,这些字段的值就能组合起来表⽰这个对象或类型当前的状态。 所以简单的来说,字段⽤来为对象或类型存储数据,多个字段的组合能表达对象或类型的状态。
(2)字段(field)是类型的成员,⼀般被称为”成员变量“
字段本质是变量,⽽且是对象或类型的成员,所以⼀般被称作”成员变量“
(3)与对象关联的字段(field)也被称作”实例字段“
(4)与类型关联的字段称为 ”静态字段“ ,由 ”static“ 修饰符进⾏修饰
”实例字段“ 与 ”静态字段“ 的区别就在于 ”实例字段“ 的组合表⽰与其关联的对象的状态;⽽静态字段则表⽰与其关联的类型的状态(为某个数据类型保存数据)。
将类实例化之后能对其可以公开访问的数据类型(实例字段)进⾏成员访问从可以⽤来表⽰这个实例的状态。
实例字段为实例存储数据,数据的组合表⽰此实例当前的状态。
class Program
{
static void Main(string[] args)
{
Student student1 = new Student();//创建⼀个Student的实例student1
student1.Age = 40;
student1.Score = 90;//实例字段存储数据的组合表⽰当前实例的状态
Student student2 = new Student();//创建⼀个Student的实例student2
student1.Age = 40;
student1.Score = 40;//实例字段存储数据的组合表⽰当前实例的状态
}
}
writeline输出数值变量class Student //声明⼀个“类”
{
//为Student声明"数据类型",创建成员,public为公开访问
public int Age;
public int Score;
//为Student声明"静态字段"成员,public为公开访问,static表⽰静态
public static int AvarageAge;
public static int AvarageScore;
public static int Amount;
public Student() //构造函数
{
//为构造函数添加⼀个逻辑,每次引⽤Student创建实例的时候Amount都会+1
Student.Amount++;
}
public static void ReportAmount()//创建⼀个静态⽅法
{
Console.WriteLine(Amount);
}
}
静态字段和静态⽅法都可以在引⽤类创建实例的时候被访问。
引⽤这个类创建实例的时候⽅可访问类中的静态字段、静态⽅法和实例字段。静态字段可以不⽤创建实例,可以直接调⽤⽅法。如:
构造函数:构造函数 ,是⼀种特殊的⽅法。主要⽤来在创建对象时初始化对象, 即为对象赋初始值,总与new⼀起使⽤在创建对象的语句中。特别的⼀个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的。
2,字段(field)的声明:
声明字段的语法格式:
字段(field)是类的成员,但并不是⼀个语句,所以声明字段的时候要写在 “类体” ⾥⾯⽽不是 ”⽅法体或⽅法体“ ⾥⾯(那就变成了”局部变量“ 了)。
在字段声明的语法中带 ”opt“ 下标的都是可选的或者可忽略的。
(特性/属性):
(字段修饰符):可⼀个或者多个,但必须是有意义的修饰符组合,如: private / public / public static;public 和private 不可同时使⽤等。
其中字段被 ”readonly“(只读修饰符)修饰的字段叫 ”只读字段“,那么就只能读取字段中的值⽽不能修改。
readonly(只读修饰符):只读字段初始化是为了不让被初始化之后得值被改变或被重新赋值
(1)只读实例字段
只读实例字段的初始化只有⼀次机会,那就是在只读实例字段变量的构造器(构造函数)中对其进⾏初始化(也可以在声明时就进⾏初始化),在创建实例的时候给构造函数传值然后对只读实例字段进⾏初始化。静态实例字段初始化事件的发⽣是在对象被创建时(实例化时)。输出值为 ”1“
class Program
{
static void Main(string[] args)
{
Student student1 = new Student(1);
// student1.ID = 3; //这⾥会报错,不能再对只读实例字段初始化后的的变量再进⾏赋值
Console.WriteLine(student1.ID);//输出结果为”1“
}
}
class Student //声明⼀个“类”
{
public readonly int ID; //只读实例字段
public Student(int id) //构造函数
{
this.ID = id;
}
}
(2)只读静态字段:第⼀种是在声明静态只读字段的时候就对值进⾏了初始化的操作;后⾯⼀种则是声明了静态只读
字段之后再创造了⼀个静态构造函数。静态字段的初始化事件发⽣是在类型被加载的时候
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Brush.DefultColor.R);
Console.WriteLine(Brush.DefultColor.G);
Console.WriteLine(Brush.DefultColor.B);
//输出三个0
Brush.DefultColor = new Color() { R=255,G=255,B=255};
//这⾥会报错“⽆法对静态只读字段进⾏赋值”
}
}
struct Color //创建⼀个构造器
{
public int R;
public int G;
public int B;
}
class Brush //创建⼀个类,其中有静态只读实例,并且在实例化的时候就进⾏了显式初始化
{
public static readonly Color DefultColor = new Color() { R = 0, G = 0, B = 0 };
}
------------------------------写法⼀样,同样会报错
class Brush //创建⼀个类,其中有静态只读实例,并且在实例化的时候就进⾏了显式初始化
{
public static readonly Color DefultColor;
static Brush() //构造函数(前⾯的 public 改成 static 变成静态构造函数)
{
Brush.DefultColor = new Color() { R = 0, G = 0, B = 0 };
}
}
(数据类型):byte、short、int、long、float、double、bool、char等。
(变量声明器):可以是 ”变量名“ 也可以是 ”变量名加上变量初始化器(也就是⼀个赋值符号加上⼀个初始
值)“。
tips:在声明⼀个字段时对其进⾏显⽰初始化和在构造函数中对其进⾏初始化是⼀样的。建议声明字段的时候就对其进⾏显⽰初始化,⽅便
⽇后分辨。
===========================================================================================
属性(property):
1、什么是属性
(1)属性(property)是⼀种⽤于 “访问对象“ 或 ”类型” 的特征的成员,⽽特征能反映他们的状态。
(2)属性(property)的功能其实和字段(field)⼀样,其实属性就是由字段发展⽽来的,功能上⼀样但是侧重点不同:
① 从命名上看,字段(field)更偏向于对实例对象在内存中的布局,⽽属性(property)更偏向于反映现实世界中对象的特
征;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论