Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Abstrakta klasser och interfaces

Postades av 2002-07-12 09:26:02 - Johan Bovin, i forum c# (c-sharp), Tråden har 18 Kommentarer och lästs av 2292 personer

Hej
Konverterade några klasser från ett STORT projekt i Java till C#...
Problemet är att vi har en massa abstrakta klasser i Java som implementerar diverse interfaces. I java behöver man ju inte implementera metoderna i abstracta klasser eftersom man kan göra det i en klass som ärver. Tyvärr så verkar det inte vara samma i C# eller?
Finns det nåt sätt så man slipper skriva in alla metoderna i den abstrakta klassen eller finns det nån annan lösning???

/Johan


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 09:49:09 - Niklas Jansson

Jag kan inte C# något vidare, så lita inte helt på vad jag säger (skriver?).

I C++ (som ju c# tydligen skall bygga på) är det dock så att abstrakta basklasser inte behöver defininera en enda medlemsfunktion, så länge de definieras som fullständigt virtuella.

I C++ används

class bla
{
public:
virtual void VirtuellFunktion() = 0;
}

Om det nu inte är så i C# (med reservation för syntaxen) så är det ju löjligt.

/Niklas Jansson


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 10:06:09 - Johan Bovin

Jo, men det är ju just själva deklarationen jag vill undvika. Exempel:

Interface A har metoden call()

Abstrakt klass B implementerar A

Klass C ärver B och implementerar metoden call()

Alltså ingen deklaration av call() i B...

/Johan


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 10:26:14 - Christer Olsson

Menar du något i den här stilen?

/CO


interface IA
{
string call();
}

class B : IA
{
public virtual string call()
{
return "result B";
}
}

class C : B
{
public override string call()
{
return "result C";
}
}


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 10:51:19 - Niklas Jansson

Ja i så fall så är det inte som i c++.

Dessa j*vla påfund: Interface!!

Vad var det för fel på en abstrakt basklass - bara? Det är ju det som är interface. Gillar INTE C#. Usch!

Microsofts smarta idéer: "om vi tar gamla, väl uttänkta och väletablerade koncept som fungerar bra - byter namn på dem och gör så att de inte fungerar som folk förväntar sig längre - så måste väl det vara bättre!"

/Niklas Jansson


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 11:07:31 - Johan Bovin

Ja, fast utan att deklarera metoden som virtual i B...
Det kanske inte funkar....
Måste kanske ge mig i att Java och C# inte funkar riktigt på samma sätt :)

/Johan


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 11:11:13 - Johan Bovin

abstrakt klass och interface är ju inte riktigt samma sak...
interfacet gör ju att du kan ha en typ av multipelt arv...som arv men ändå inte...utan tvingar dig att implementera metoder...
Man kan göra riktigt bra strukturer med interfaces och abstrakta klasser...

/Johan


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 11:17:04 - Christer Olsson

En variant utan definition blir. (I min värld skiljer man på deklaration och definition men det är i min värld som sagt.)

interface IA
{
string call();
}

abstract class B : IA
{
public abstract string call();
}

class C : B
{
public override string call()
{
return "result C";
}
}

Notera att klasser bara kan ärva en annan klass men de kan implementera flera interface. Ett interface kan "ärva flera interface".


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 11:18:49 - Niklas Jansson

>interfacet gör ju att du kan ha en typ av multipelt arv...som arv men ändå inte...utan tvingar dig att implementera metoder...

En abstrakt klass i C++ innebär att:
-du kan inte instansiera objekt som inte definierar alla rent virtuella funktioner (metoder), dvs. du måste definiera rent virtuella funktioner.
-vanliga virtuella funktioner måste inte definieras av subklassen, men man får.
-icke virtuella funktioner skall (bör) inte definieras av subklassen.
-du måste ärva klassen, och du kan ärva den hur multiplet du vill.

Ett interface är bara en fånig variant på abstrakta klasser.

/Niklas Jansson


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 11:23:37 - Niklas Jansson

C++ motsvarighet till interface är protokoll-klasser.

protokoll-klass: En class med en uppsättning rent virtuella funktioner, som måste definieras i alla klasser som ärver klassen.

Vidhåller min uppfattning om att C# är bort om all förtvivlan värdelöst!

/Niklas Jansson


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 11:29:07 - Christer Olsson

Hej Niklas,

jag brukar avstå från religösa diskussioner och du får gärna ha din åsikt. Vad jag har lärt mig genom åren är att språk kommer och språk går. Dessutom är olika språk lämpliga till olika ändamål.

En liten fråga bara: Varför skriver du i detta forum om du bara skriver ner C#? Meningen är väl att vi skall hjälpa varandra?

/CO


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 11:38:57 - Johan Bovin

Jaja, det ser ut som att de kommer bli mycket copy, paste efter min konvertering...*SUCK* så går det när man försöker vara smart...

Niklas: Du kan säga vad du vill om Interfaces men jag tycker det är en grym grej...sen om det är c++ kompatibelt det är ju en helt annan grej. Som jag ser det är C# ett språk som tillåter att du programmerar C++ - likt eller Java-likt eller blandar det lite. Grejen är ju att du inte BEHÖVER göra som i det ena eller det andra. Man har helt enkelt lite valfrihet..

/Johan

I Java kan man ju typ göra så här:
interface IA
{
string call();
}

abstract class B : IA
{

}

class C : B
{
public override string call()
{
return "result C";
}
}


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 11:43:10 - Niklas Jansson

Lessen, det var verkligen inte meningen att förstöra tråden på det viset.

Jag håller med dig i det du säger om att språk kommer och går.

Har en lite dålig dag, och när man ser hur Johan behöver skriva om sina klasser - bara för att Microsoft hittar på nya saker (som jag ser som onödiga) så känns det lite irriterande.

Jag kan inte säga att c# bara är dåligt, men ur min (och Bjarne Stroustrup's) synvinkel så är det nästan bara syntaxen som är någorlunda gemensam mellan språken.

Hittils har jag inte hittat någonting som har övertygat mig om att lära mig C#. Hela grejen med C++ är att man inte introducerar massa nya keywords och inte har något som är plattformsberoende.

Väntar istället med spänning på C++0x

/Niklas Jansson


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 11:54:04 - Johan Bovin

>bara för att Microsoft hittar på nya saker (som jag ser som onödiga) så känns det lite irriterande.

Fast jag tror inte att det är Microsoft som kommit på interfaces eftersom de även finns i Java. Däremot så behandlar inte Java och C# Abstrakta klasser som implementerar Interfaces på samma sätt...se ovan

/Johan - som drar på semester istället...


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 11:55:03 - Niklas Jansson

>Du kan säga vad du vill om Interfaces men jag tycker det är en grym grej...

Jag med!

Men istället för att skriva (använder ditt exempel):

interface IA
{
string call();
}

abstract class B : IA
{

}

class C : B
{
public override string call()
{
return "result C";
}
}


Så tycker jag att det går lika bra med:

class IA
{
public:
virtual string call()=0; //måste definieras någon annanstans
//klassen blir abstrakt
}

class B : IA
{
//B blir också abstrakt eftresom inte call blir definierad
}

class C : B
{
public:
string call()
{
return "result C";
}
}

Om man sedan vill ärva C ytterligare kan man göra call virtuell, och sedan välja om man vill definiera i andra klasser eller inte - det kallar jag valfrihet!

/Niklas Jansson


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 12:00:27 - Niklas Jansson

>Fast jag tror inte att det är Microsoft som kommit på interfaces eftersom de även finns i Java.

Nej, det har du nog rätt i, men därför är det ju ganska uppenbart att C# inte vänder sig till tidigare C++-anhängare!

C++ är ett "rent" språk. Varenda detalj är genomtänkt. Tänk dig att du har en rolex och en casio. Rolexen är snygg och uttänkt (undrar vilken jag tycker är rolex... :-) ), medan casion är lätt att lära sig, men lite plastig.

Sätt sedan ihop de båda klockorna till en. Hälften plast, hälften guld. Båda delarna blir löjliga!

/Niklas Jansson


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 12:02:49 - Johan Bovin

Yepp, du har rätt men det är lite svårt om du har en struktur med en abstrakt klass som implementerar mer än ett interface. I mitt fall implementerar den abstrakta klassen 3 interfaces. Och då vill jag ju inte deklarera alla metoderna i den abstrakta klassen...utan jag vill ju bara implementera alla metoder i klasserna som ärver...

/Johan


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 13:09:12 - Christer Olsson

Kan denna variant vara något?

interface IA
{
string call();
}

interface IB : IA
{
}

class C : IB
{
public string call()
{
return "result C";
}
}

/CO


Svara

Sv: Abstrakta klasser och interfaces

Postades av 2002-07-12 13:18:56 - Johan Bovin

hehe...om det bara hade varit så lätt...min "B" håller en del andra metoder plus konstanter som används av de fyra klasser som ärver den...

Nä, det blir nog att inse fakta...copy & paste is fun...

/Johan


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 154
27 952
271 704
541
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies