//具有支持字段的属性,借助私有字段
public class Time
{
private double seconds;
//具有支持字段的属性,借助私有字段
public double Hours
{
get
{
return seconds/3600;
}
set
{
seconds = value*3600;//value为关键字
}
}
//表达式主体定义
public double Minutes()=>seconds/60;
//getset都有的表达式主体定义
public double Day
{
get=>seconds/3600/24;
set=>seconds=value*3600*24;
}
//自动实现属性
public int Id {get;set;}
//必需属性 required关键字,强制初始化
public required string Name{ get; set; }
//属性可以用访问修饰符修饰,也可static,virtual,abstract,sealed
}
hidden属性:访问派生类中同名属性
public class Employee
{
private string name;
public string Name
{
get => name;
set => name = value;
}
}
public class Manager : Employee
{
private string name;
public new string Name//使用new关键字
{
get => name;
set => name = value + "abcd";
}
}
//访问
Manager m1 = new Manager();
m1.Name = "John";//Manager类中
((Employee)m1).Name = "Mary";//Employ类
override属性,访问器修饰符必须与重写的访问器一致
abstract class Shape
{
public abstract double Area
{
get;
set;
}
}
class Square : Shape
{
public double side;
public Square(double s) => side = s;
public override double Area//override关键字
{
get => side * side;
set => side = System.Math.Sqrt(value);
}
}
接口属性,不能对接口使用访问器修饰符
interface IEmployee
{
string Name
{
get;
set;
}
int Counter
{
get;
}
}
public class Employee : IEmployee
{
public static int numberOfEmployees;
private string name;
public string Name
{
get => name;
set => name = value;
}
private int counter;
public int Counter
{
get => counter;
}
public Employee() => counter = ++numberOfEmployees;
}
自动实现的属性
//C#6后可以直接初始化
public string FirstName { get; set; } = "Jane";