Avatar billede Skynet Mester
01. juni 2008 - 13:04 Der er 8 kommentarer og
1 løsning

Gennerelt om Interfaces

Hej

Jeg tænkte på hvor detaljeret man kan lave et interface

Er det ex. kun en metoder, eller kan man gå i detaljer med hvad metode skal kunne.

Eller er det kun på dette niveau:

int tax
        {
        get;
        }

Kan man godt sige at den skal udregne noget bestemt?
Avatar billede arne_v Ekspert
01. juni 2008 - 15:48 #1
Du kan kun angive metode/property signatur i et interface - ikke semantik.

Men du kan jo skrive en kommentar om hvad den forventede semantik er og så
uddele virtuelle tæv til dem der ikke implementerer den ved code review !
Avatar billede arne_v Ekspert
01. juni 2008 - 15:50 #2
public interface X
{
  int add(int a, int b);
}

og

public class XI : X
{
  int add(int a, int b)
  {
      return a - b;
  }
}

vil compile, men bør aldrig slippe gennem code review.
Avatar billede arne_v Ekspert
01. juni 2008 - 15:50 #3
(tilføj lige public på metoden i klassen ...)
Avatar billede Skynet Mester
01. juni 2008 - 17:35 #4
ok, tak. hvordan laver man det, hvis Interfacet skal bruges til at sætte en  Property i klassen ?

    Har prøvet, men får denne fejl:Error    1    Property or indexer 'Interface2.Bus.NumberOfSeats' cannot be assigned to -- it is read only    C:\a_SILASY\BAIT\C#\Interface2\Interface2\Interface2\Bus.cs    44    13    Interface2


Interface:
int regnr(int nyt_nummer);


klasse:
public int regnr(int nyt_nummer)
        {
            this.NumberOfSeats = nyt_nummer;
        }
Avatar billede arne_v Ekspert
01. juni 2008 - 18:15 #5
Den fejl relaterer sig til NumberOfSeats ikke til regnr.

Hvordan ser NumberOfSeats ud ?
Avatar billede Skynet Mester
01. juni 2008 - 18:35 #6
public class Bus : Vehicle, Itaxable
    {

        protected int numberOfSeats;

        public Bus(int numberOfSeats, int regNumber, int value) :
            base(regNumber, 80, value)
        {
            this.numberOfSeats = numberOfSeats;
        }
Avatar billede Skynet Mester
01. juni 2008 - 22:28 #7
public int NumberOfSeats
        {
     
              get { return numberOfSeats; }
              set { numberOfSeats = value; }
       
        }

det virker, tak for hjælpen..
Avatar billede arne_v Ekspert
02. juni 2008 - 01:43 #8
så smider jeg et svar
Avatar billede wmann Nybegynder
09. juli 2008 - 11:06 #9
Du kunne også lave et interface med dine metoder {get/set} og etc.
Så lave en public abstract class Taxa der nedarver fra dit interface -->
public abstract VehicleImpl : IVehicle (når den er abstract kan du ikke lave et objekt af den)
og i denne implementerer du alle metoder der er i dit interface (kan du gøre vha. at højreklikke på dit interfacenavn du nedarver fra og sige implement.
Så ligger du attributterne ind, dine get/set og andre metoder og hele logikken.

Så i den klasse hvor du fx. vil bruge metoderne og attributterme kan du nedarve din abstract klasse som så får metoderne med logik med i sig.

Fx. du laver IVehicle med metoden
interface IVehicle
Start()
Stop()

og laver VehicleImpl (implementatationen af dit interface)
public abstract VehicleImpl : IVehicle

public void Start()
{
    //Check gear or set in 1.
    //Press in clutch
    //Turn key
}

public void Stop()
{
    //Turn key etc...
}

Nu har du fx. klassen Taxa, og klassen Bus som begge skal have ovenstående metoder med i sig men som OGSÅ skal have specialiseringer -->

public class Taxa : VehicleImpl
{
    private string mydrivername = "";

    public Taxa(string drivername)
    {
        mydrivername = drivername;
    }

    public void YellAtPassenger()
    {
        this.Stop();
        //Do something with the passenger
    }

^^ Dermed kan du bruge metoderne du nedarver metoden du har lavet i din VehicleImpl.

og i klassen Bus kan du gøre det samme i speciliseringer. Derved kan du opbygge en hel struktur med nedarvninger og specaliseringer alt efter dit behov.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester