如何实现接口来限制类的获取和设置属性
本文关键字:获取 属性 设置 何实现 实现 接口 | 更新日期: 2023-09-27 18:33:42
我正在努力理解 C# interface
s。 我知道它们允许多重继承。 我正在尝试为一个场景编写代码:员工可以查看自己的数据,但不能查看其他人。 如果员工向该经理报告,则经理可以查看和编辑该员工信息。
所以我从一个抽象类开始,因为每个人都是用户,休假也一样。
public abstract class User {
string _id;
string _firstName;
string _lastName;
double _salaryAmount;
double _bonusAmount;
int _vacationBalance;
public void TakeVacation(int hours) {
_vacationBalance -= hours;
}
//do I implement this here?
/*
public int SalaryAmount{ }
*/
}
我应该使用接口来定义IEditable
和IViewable
吗?我可以做这样的事情吗?
public interface IEditable {
double SalaryAmount { get; set; }
}
public class Employee : User, IEditable {
public double SalaryAmount {
get {
return base._salaryAmount;
}
set {
base._salaryAmount = value;
}
}
}
//Will I need a ReadOnlyEmployee or something?
我只是不确定如何阻止经理编辑用户,或者如何为这种情况编写界面。
我不确定我会说接口允许多重继承(不是真正的C++形式)。 接口提供了一个抽象,允许多个实现通过一组预定义的方法/属性一致地运行。
通常,这被用作一般抽象,例如,假设您想获取一些数据。 您可以创建一个接口,该接口显示返回流的方法。 然后,基于对象的实现,您可以从文件或 websocket 或管道等返回流,而无需接口的使用者知道/关心它来自哪里。
在您的示例中,您不必在 User 类中执行任何操作,因为它不实现 IEditable 接口,只有 Employee 类实现。
这是我认为你正在寻找的。 这使用显式接口语法 (IEditable.Name),因为基方法名称和接口名称相同,但需要以不同的方式操作。
public abstract class User {
public String Id { get; protected set; }
public String FirstName { get; protected set; }
public String LastName { get; protected set; }
// ...
public Double SalaryAmount { get; protected set; }
// ...
public Int32 VacationBalance { get; protected set; }
public void TakeVacation(int hours) {
VacationBalance -= hours;
}
}
public interface IEditable {
Double SalaryAmount { get; set; }
}
public class Employee: User, IEditable {
#region IEditable Members
double IEditable.SalaryAmount {
get { return base.SalaryAmount; }
set { base.SalaryAmount = value; }
}
#endregion
}
class Program {
static void Main(string[] args) {
var emp = new Employee();
emp.SalaryAmount = 3; // ERROR!
((IEditable) emp).SalaryAmount = 3; // GOOD!
}
}