Attualmente sto cercando di padroneggiare C #, quindi sto leggendo Adaptive Code tramite C # di Gary McLean Hall .
Scrive di schemi e anti-schemi. Nella parte relativa alle implementazioni e alle interfacce, scrive quanto segue:
Developers who are new to the concept of programming to interfaces often have difficulty letting go of what is behind the interface.
At compile time, any client of an interface should have no idea which implementation of the interface it is using. Such knowledge can lead to incorrect assumptions that couple the client to a specific implementation of the interface.
Imagine the common example in which a class needs to save a record in persistent storage. To do so, it rightly delegates to an interface, which hides the details of the persistent storage mechanism used. However, it would not be right to make any assumptions about which implementation of the interface is being used at run time. For example, casting the interface reference to any implementation is always a bad idea.
Potrebbe essere la barriera linguistica o la mia mancanza di esperienza, ma non capisco cosa significhi. Ecco quello che capisco:
Ho un divertente progetto di tempo libero per praticare C #. Lì ho una classe:
public class SomeClass...
Questa classe è usata in molti posti. Durante l'apprendimento di C #, ho letto che è meglio astrarre con un'interfaccia, quindi ho fatto il seguente
public interface ISomeClass <- Here I made a "contract" of all the public methods and properties SomeClass needs to have.
public class SomeClass : ISomeClass <- Same as before. All implementation here.
Quindi sono entrato in tutti i riferimenti di classe e li ho sostituiti con ISomeClass.
Tranne che nella costruzione, dove ho scritto:
ISomeClass myClass = new SomeClass();
Sto capendo correttamente che questo è sbagliato? Se sì, perché così, e cosa dovrei fare invece?