Toon posts:

[C#] Abstract base form

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een baseform class maken met een aantal standaard functies, maar enkele moeten door de afgeleide form worden overriden.

Als ik een abstract form maak met abstract functies dan kan ik de afgeleide form niet meer editen in mijn designview omdat de baseclass abstract is. Logisch, maar weet iemand een methods waarop ik dit principe wel kan bereiken.

Verwijderd

Topicstarter
Ik heb het nu zo gedaan.

In mijn base form heb ik de volgende functie aangemaakt.
C#:
1
2
3
4
public virtual void SaveTaskSettings()
{
    throw new NotImplementedException("This function has not been overriden yet")
}


Is dit een "nette" manier.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 17-12-2025

curry684

left part of the evil twins

Hummm haal je niet het hele idee van een abstract baseclass onderuit als je de abstract methods vervangt door dummy stubs die een exception mikken?

Professionele website nodig?


  • Dennis van der Stelt
  • Registratie: Januari 2000
  • Laatst online: 16:34
De methode zélf abstract definieeren.

Anders een interface maken voor de functies waar je geen implementatie hebt. Wat je daarboven doet, een throw exception omdat ie niet overridden is, is inderdaad een beetje raar.

Doe maar gewoon, dan doe je al gek genoeg.


Verwijderd

Topicstarter
Ik heb gekeken naar de Interface methode. In principe logisch, maar ik wil een functie in mijn baseform aanroepen met een button, en die moet dan in de afgeleide forms geimplementeerd (overriden) worden.
Als ik een interface maak dan heb ik 2 mogelijkheden die naar mijn inzien niet werken:
  1. De interface wordt geimplementeerd door de base class (en dus door de afgeleide classen): Hierdoor kan de functie niet meer overriden worden. (compilatie fout)
  2. De interface wordt alleen geimplementeerd door de afgeleide form: Dan kent de baseform de functie niet, en kan die niet in de button event geplaatst worden.
Misschien zie ik het even niet, maar kan iemand me verder helpen.

[ Voor 6% gewijzigd door Verwijderd op 14-08-2006 21:43 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 20:35
Hmm, even een schopje... Ik heb een tijd terug ook dit probleem gehad.
Als ik een abstract form maak met abstract functies dan kan ik de afgeleide form niet meer editen in mijn designview omdat de baseclass abstract is. Logisch, maar weet iemand een methods waarop ik dit principe wel kan bereiken.
Dit vind ik helemaal niet logisch, want, je kan je abstracte base-form wel in je designer openen; waarom zou je dan de concrete form niet in de designer kunnen openen. Dit vind ik toch een misser van MS...

Bij je eerste oplossing / voorstel:
je kan die interface-method natuurlijk een virtual method laten oproepen, die je dan overrided in je inherited classes, maar ik zie daar eigenlijk het voordeel niet van in.

Voor de 2de: je kan je base-form die interface ook laten implementeren natuurlijk, maar in de implementatie van de base form excepties gooien...

Hoedanook, ik zou het oplossen zoals je in je tweede post aangeeft: exceptions gooien als je een method aanroept die niet overriden is, en deze overriden moet zijn; of als de base-class direct gebruikt wordt...

Je kan het oplossen door een protected constructor te maken in je base - class en je base class niet abstract te maken. Op die manier kan je ook geen form instantieren.
\[.NET/VS.NET] inheriten van abstract forms

https://fgheysels.github.io/


  • Feyd-Rautha
  • Registratie: November 2001
  • Laatst online: 02-08-2025
Hoedanook, ik zou het oplossen zoals je in je tweede post aangeeft: exceptions gooien als je een method aanroept die niet overriden is, en deze overriden moet zijn; of als de base-class direct gebruikt wordt...
Dat is ook niet zo heel raar, zoals dvdstelt stelt :P
Dit is namelijk ook de manier waarop dit in SmallTalk gedaan wordt, en we kunnen SmallTalk toch wel als een/de pionier van OO-talen beschouwen. Maar SmallTalk kent ook wel het keyword 'abstract' niet.

Dus persoonlijk vind ik dit niet zo een slechte oplossing.

[ Voor 3% gewijzigd door Feyd-Rautha op 03-09-2006 16:03 ]

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. Where the fear has gone there will be nothing. Only I will remain.

Pagina: 1