ProductEntity p = new ProductEntity(); p.ProductPhotoId = 2; p.SupplierId = 1; p.ProductName = "New fasil"; p.ProductPrice = 299; p.ProductDescription = "A little description";
ProductDALC NewProduct = new ProductDALC(); NewProduct.Save(p); // Bruger interfacet og går derfra ned i save metoden "class ProductDALC" klassen er det korrekt?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
IProduct NewProduct = new ProductDALC(); // NewProduct peger på et objekt som oberholde IProduct kontraktem om at have en Save metode // initialiser med et objekt som opfuylder kontrakten NewProduct.Save(p); // kald Save da du ved at uanset hvilken klasse NewProject peger på så overholder den IProduct kontrakten
Glædelig nyhed...det er begyndt at klare op i mit forvirrede sind.
Dvs et interface er det jeg kommunikerer med udefra, og rent klasse mæssigt kan jeg have fx. to save metoder. Det eneste der adskiller om hvilken metode i en klasse jeg benytter, er når jeg laver en instans af en klasse.
// Her bruger jeg class1 IMitInterface o = new class1 // Her bruger jeg interface til at fortælle at jeg kan benytte de 2 metoder save og load som ligger i class1 o.Save(xx xxx); o.Load(xx xxx);
// Her bruger jeg class2 IMitInterface o = new class2 // Her bruger jeg interface til at fortælle at jeg kan benytte de 2 metoder save og load som ligger i class2 o.Save(xx xxx); o.Load(xx xxx);
det er ligesom en postkasse - uanset hvor du er i verden, så sætter du et frimærke på et brev og smider det i en postkasse - du kender kun interfacet, men uanset om det er Post Danmark eller langtbortistans postvæsen der ligger bagved så når brevet frem
Er der måder man kan sikre, at man tvungent skal gå igenem et interface? For man kan jo hurtigt komme til at lave en instans af fx class1 (class1 o = new class1) uden at indikation af interface, og så direkte gøre brug af metoden o.save fx.
Arne_v 14:31 >> 1. "I et vist omfang kan man dog styre det ved at lave klasser som returnerer interfaces.". Er det ikke metoderne i klassen MultiDb der returnerer interfaces istedet ? 2. I "public static IDbConnection GetConnection(string constr)" er IDbConnection et interface. Hvordan ser det interface ud ?
Så er jeg tilbage. Tak for alle vinkler og opklaringer. Det jeg synes er sjovt, er at den bog jeg har siddet og læst om interfaces i c# på intet tidspunkt har lavet en instans af en klasse som fx i mit tilfælde:
IProductDALC NewProduct = new ProductDALC(); NewProduct.SaveProduct(p);
Men istedet for...
ProductDALC NewProduct = new ProductDALC(); NewProduct.SaveProduct(p);
Jeg ved ikke om det er en fejl i bogen, eller om det er underforstået... bogen går dog videre med at fortælle at man kan caste til et interface, men intet sted i bogen er måden: IProductDALC NewProduct = new ProductDALC(); blevet vist som eksempel. Jeg gætter at man catser instansierer alt på på denne linje, det virker jo også uden fejl.
Det er ikke nødvendigt at caste i den situation. Kun hvis det er den anden vej.
Umiddelbart vil jeg mene at det er en meget brugt konstruktion. Fordelen ved den konstruktion er at man får compiler fejl, hvis man forsøget at kalde NewProduct.xxxx hvor xxxx kun er i ProductDALC men ikke i IProductDALC. Og det er jo skidt fordi så har man bundet sig til en bestemt implementation.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.