C#中的字段与属性
学习笔记~~~~~~~~~~~~
字段
字段是定义在方法外面的变量,是成员变量,主要是为了类的内部数据交换使用,字段一般是用private修饰,也可以用readonly修饰,表示只读字段,其它修饰符比较少用;字段是用来存储数据的。
字段声明格式,[访问修饰符] 数据类型 字段名 [=初始值] 如:
private string phoneName = string.Empty;
/// <summary>
/// 手机类:手机编号,手机名称,手机价格,上线日期,销售年期
/// </summary>
public class MobilePhone
{
//定义一组手机数据字段,字段也是成员变量
private int phoneId;
private string phoneName;
private int phonePrice;
private DateTime onlineTime;
private readonly int sellYears;
}
属性
属性可以理解为对数据的存取,是一种方法,是字段的封装(字段才是对数据的保存单元)。一般对外提供访问,可以添加需要的逻辑,属性一般是用public修饰。
public class MobilePhone1
{
private int phoneId; //私有字段,公有属性
public int PhoneId
{
get { return phoneId; } //读取字段
//属性可以有业务逻辑,对数据进行基本的筛选能力
set //给字段赋值
{
if(value < 0)
phoneId = 1000;
else
phoneId = value;
}
}
private string phoneName;
public string PhoneName
{
get { return phoneName; }
set { phoneName = value; }
}
private int phonePrice;
public int PhonePrice
{
get { return phonePrice; }
set { phonePrice = value; }
}
private DateTime onlineTime;
public DateTime OnlineTime
{
get { return onlineTime; }
set { onlineTime = value; }
}
public int SellYears
{
//属性还可以设置为只读属性
get { return DateTime.Now.Year - onlineTime.Year+1; }
}
}
public class Test
{
public void test1()
{
MobilePhone1 mobilePhone1 = new MobilePhone1();//创建手机类的实例对象
mobilePhone1.PhoneId = -888;
mobilePhone1.PhoneName = "华为Mate40Pro+";
mobilePhone1.PhonePrice = 7800;
mobilePhone1.OnlineTime = Convert.ToDateTime("2020-11-01");
//mobilePhone1.SellYears = 4; 只读属性,不能赋值
Console.WriteLine("手机编号为:" + mobilePhone1.PhoneId);
Console.WriteLine("手机名称为:" + mobilePhone1.PhoneName );
Console.WriteLine("手机价格为:" + mobilePhone1.PhonePrice+"元" );
Console.WriteLine("手机上线日期:" + mobilePhone1.OnlineTime );
Console.WriteLine("手机销售年期为:" + mobilePhone1.SellYears +"年");
}
}
运行结果
手机编号为:1000
手机名称为:华为Mate40Pro+
手机价格为:7800元
手机上线日期:2020/11/1 0:00:00
手机销售年期为:1年
总结
属性可以说是字段的扩展,字段是存储数据的单元,而属性本身不存储数据,可以说是对数据的操作,拥有自己的业务逻辑,获取数据,对数据处理,返回处理后的数据等。
属性的定义是get访问器和set访问器组成,get访问器就是对字段值进行读取,而set访问器就是对字段值进行赋值,其实就是对字段操作的两个方法。
.net 4.6版本以上使用属性更简便
输入 prop 然后双击tab键,自动生成以下形式:
public class MobilePhone2
{
public int PhoneId { get; set; }//自动生成私有字段
public string PhoneName { get;}
public int PhonePrice { get; set; } = 7800;
public DateTime OnlineTime { get; set; }
public int SellYears { get => DateTime.Now.Year - OnlineTime.Year + 1; }
}