Im folgenden Code:Warum wird dieses Feld als privat und auch schreibgeschützt deklariert?
public class MovieRepository : IMovieRepository
{
private readonly IHtmlDownloader _downloader;
public MovieRepository(IHtmlDownloader downloader)
{
_downloader = downloader;
}
public Movie FindMovieById(string id)
{
var idUri = ...build URI...;
var html = _downloader.DownloadHtml(idUri);
return ...parse ID HTML...;
}
public Movie FindMovieByTitle(string title)
{
var titleUri = ...build URI...;
var html = _downloader.DownloadHtml(titleUri);
return ...parse title HTML...;
}
}
I asked for something to review my code, und jemand schlug vor, diesen Ansatz. Meine Frage ist, warum ist die IHTLDownloader Variable readonly?
Bingo. Wenn es nur gelesen wird, kann es nur entweder durch Objektinitialisierung oder im Konstruktor festgelegt werden. Es ist nicht notwendig, aber ein Teil der Codequalität beschränkt den Bereich, in dem ein Fehler auftreten kann. –
Erics Antwort war gut, machte aber keinen Sinn, bis Cylon sagte, dass man nur ein schreibgeschütztes Feld in der Initialisierung und im Konstruktor ändern konnte. Danke Leute! –
Es gibt einen zusätzlichen Vorteil darin, dass der Compiler und der JITter bestimmte Optimierungen bewirken können in dem Wissen, dass der Wert nach der Konstruktion behoben wird. –