Ich denke, das ist eine häufig gestellte Frage und ich glaube, dass ich die Grundlagen gut behandelt habe, wie in wie Objekte, Strukturen oder Werttypen zwischen Funktionen übergeben werden. Nehmen wir an, ich die folgenden Klassen:Wie man eine Mutable nicht von einer Methode zurückgibt und Klasseninterna aussetzt
public class User{
public int xCoor{get;set}
public int yCoor{get;set}
}
public class UserManager{
Dictionary<int,User> userMapping = new Dictionary<int,User>();
public void AddUser(User user){//stuff}
public void RemoveUser(User user){//stuff}
public IEnumerable<User> GetAllUsers(){return userMapping.Values;}
}
public class UserConsumer{
private UserManager;
public void GetUserCoordinates(){
var listThatExposesInternals = UserManager.GetAllUsers().ToList();
listThatExposesInternals.Foreach(user => user.xCoor = user.yCoor = 0);
// Now that I altered the internals of the class, it is messed up
// I only want the consumer to be able read
}
}
Wie kann ich sicherstellen, dass die Interna der Benutzerklasse intakt bleibt. Ich bin mir bewusst, dass es für dieses Problem auch angebracht ist, xCoor und yCoor und nicht die gesamte Benutzerklasse offenzulegen, aber meistens stehe ich vor dem Problem, dass ich den Verweis auf die Klasse zurückgeben muss. Ich schätze jede Beratung.
Wenn Sie nicht möchten, dass Personen ein Objekt mutieren können, machen Sie das Objekt nicht veränderbar ... – Servy
Fragen Sie sich selbst: Wer sollte 'User's' xCoor' und '' ändern können yCoor'? – Andrew
@Servy, vielen Dank für Ihre Antwort. Die Sache ist manchmal, dass ich benötige, dass Benutzerklasse in irgendeinem Teil des Rahmens mutiert wird und in anderen Teilen muss sie unveränderlich sein und nur verwendet werden, um ihre Werte zu betrachten. –