C#:如何将 class 属性 公开给一个 class 而不是另一个?

C#: How can I expose a class property to one class but not to another?

我的 class 库中有一个数据合同 "StudentInformation",如下所示:

public class StudentInformation
{
    public int StudentId { get; set; }
    public bool CanChangeBus { get; set; }
    public List<int> AvailableBuses { get; set; }
}

public class BusChangeRequestModel
{
    public StudentInformation StudentInfo { get; set; }
    ...
    ...
}

public class BusChangeResponseModel
{
    public StudentInformation StudentInfo { get; set; }
    ...
}

请求模型发送 StudentId,class 库处理信息并填充属性 "CanChangeBus" 和 "AvailableBuses",然后在响应模型中返回。

我想从请求模型中隐藏属性 "CanChangeBus" 和 "AvailableBuses"。如果我将这些属性的 setter 更改为 "internal",则无法通过调用应用程序设置这些属性,但它们仍然可见。如何隐藏它们以防止调用应用程序的请求模型实例?

public class BasicStudentInformation
{
    public int StudentId { get; set; }
}

public class StudentInformation : BasicStudentinformation
{
    public bool CanChangeBus { get; set; }
    public List<int> AvailableBuses { get; set; }
}

public class BusChangeRequestModel
{
    public BasicStudentInformation StudentInfo { get; set; }
    ...
    ...
}

public class BusChangeResponseModel
{
    public StudentInformation StudentInfo { get; set; }
    ...
}

所以BusChangeRequest只需要看到id,那么它应该只有id。

public class StudentInformation
{
    public int StudentId { get; set; }
    public bool CanChangeBus { get; set; }
    public List<int> AvailableBuses { get; set; }
}

public class BusChangeRequestModel
{
    public int StudentId { get; set; }
}

//I don't know what is expected as a repsonse?  Is StudentInfromation really the correct response
//or is something like "Accepted", "rejected", Fail...???
public class BusChangeResponseModel
{
    public StudentInformation StudentInfo { get; set; }
}

使用继承。类似于:

public class StudentBase
{
    public int StudentId { get; set; }
}

public class StudentInformation : StudentBase
{
    public bool CanChangeBus { get; set; }
    public List<int> AvailableBuses { get; set; }
}

public class BusChangeRequestModel
{
    public StudentBase StudentInfo { get; set; }
    ...
    ...
}

public class BusChangeResponseModel
{
    public StudentInformation StudentInfo { get; set; }
    ...
}