Вы можете подклассифицировать класс Student и предоставить свою собственную реализацию только для чтения, гарантируя, что каждый общедоступный сеттер является окончательным. Разумеется, его все равно можно вернуть к Студенту, но для ваших собственных целей развития вы можете убедиться, что он будет локально «только для чтения».
Или вы можете перенести класс ученика в собственный класс, только предоставляя доступ к геттерам.
Вот несколько примеров кода, чтобы проиллюстрировать методы, которые я описал, учитывая, что некоторые люди, похоже, не считают, что это возможно ...
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Student student = new Student();
student.Name = "Joe";
StudentSubClass studentSubClassed = new StudentSubClass();
studentSubClassed.Name = ""; // THIS LINE IS DISALLOWED FOR COMPILATION.
StudentWrapper studentWrapped = new StudentWrapper(student);
studentWrapped.Name = ""; // THIS LINE IS DISALLOWED FOR COMPILATION.
}
}
class Student
{
public string Name { get; set; }
}
class StudentSubClass : Student
{
public new string Name { get; private set; }
}
class StudentWrapper
{
private Student student;
public StudentWrapper(Student student)
{
this.student = student;
}
public string Name
{
get
{
return this.student.Name;
}
}
}
}
Теперь, конечно, вы можете бросить экземпляр подкласса назад к студенту, как так ...
var newStudent = (Student)studentSubClassed;
newStudent.Name = "";
И это позволило бы доступ снова, но, учитывая, что это ты, что это его разработку, то вы можете быть уверены, что это по крайней мере, «разумно» только для чтения при условии, кто не вернитесь и бросьте это, что приведет к победе над тем, что вы ho ping для достижения этой разработки.
Не существует метода чугуна для обеспечения будущего неправильного использования метода подкласса, хотя это вполне разумный способ сделать это, если понимать, почему это делается, но с использованием техники обертки, тогда вы можете убедиться, что ваша реализация не будут затронуты неправильным использованием. Однако, если обернутые классы меняются в будущем, тогда вам придется соответствующим образом изменить свою обертку.
Другой альтернативой было бы просто написать собственную реализацию класса Student в качестве класса Immutable.
Сделать приватным и подвергать каждое свойство самостоятельно через свойства только для чтения. –
«И ученик-член не глубоко читаем», хорошо, я понимаю, что английский не является вашим первым языком. Но что вы подразумеваете под «глубоко читаемым»? Не понятно. – TomTom
@TomTom: он означает, что никто не сможет изменить имя учащегося (или другие свойства) позже. –