[c#] classloze functies mogelijk (zoals in PHP)?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • reyan
  • Registratie: November 2003
  • Laatst online: 17-12-2021
Ik heb nogal vaak bepaalde functies (bv voor een bepaalde tekstopmaak) die ik veelvuldig doorheen heel wat classes gebruik (van een Windows applicatie met vele forms). Nu moet ik of die veelgebruikte functies in elke class zetten, of een class aanmaken met die functies in. De eerste oplossing heeft nogal wat dubbele code tot gevolg en geeft kopzorgen bij aanpassingen. De tweede methode zorgt ervoor dat ik steeds de class moet initializeren voor een banale functie.

In PHP is het echter mogelijk om functies buiten de classes te zetten, in een klassieke non-object-oriented C-stijl. Je kan deze dan van overal rechtstreeks aanroepen, ook vanuit andere classes.

Nu vroeg ik me af of dit ook mogelijk is in C# (.NET)?

Of hoe pakken jullie zoiets aan?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

reyan schreef op dinsdag 06 juni 2006 @ 12:21:
Nu moet ik of die veelgebruikte functies in elke class zetten, of een class aanmaken met die functies in. De eerste oplossing heeft nogal wat dubbele code tot gevolg en geeft kopzorgen bij aanpassingen. De tweede methode zorgt ervoor dat ik steeds de class moet initializeren voor een banale functie.
static functions? dan hoef je geen instantie van die class te hebben.
geen idee of C# dat ondersteund, maar lijkt me raar als dat niet zo is :)

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:04
Je kan een static class maken met enkel static methods.
(Het static keyword kan je op class niveau enkel vanaf .NET 2.0 gebruiken).

Dus zo:
code:
1
2
3
4
5
6
public static class MyUtils
{
    public static Blaa()
    {
    }
}

Als je over .NET 2.0 beschikt.
Indien je met .NET 1.x werkt, doe je het zo:
code:
1
2
3
4
5
6
7
8
public sealed class MyUtils
{
     private MyUtils() {}

    public static Blaa()
    {
    }
}


En je gebruikt de method dan gewoon zo:
code:
1
MyUtils.Blaa();

Je hoeft dus geen instance van je class MyUtils te maken.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • reyan
  • Registratie: November 2003
  • Laatst online: 17-12-2021
|:( Hoe stom van me... Ik gebruik elders al static classes & functies en had niet de link gelegd dat ik dat hier ook heel handig kon toepassen.

Bedankt voor het duwtje in de juiste richting :)

Acties:
  • 0 Henk 'm!

  • DirkT
  • Registratie: Juli 2002
  • Niet online

DirkT

toet

Dit is meteen ook je oplossing mocht je een Singleton willen maken.

Een singleton, zoals de naam het al doet vermoeden, wil zeggen dat er maar één instantie is van de klasse. Iedereen die deze klasse aanroept kan geen nieuw geheugen van dit type klasse maken, maar kan alleen de bestaande instantie gebruiken.

Hoewel ik het in C# niet de fijnste oplossing vind is sealed(1.x) en static(2.0) een onmisbare mogelijkheid in deze taal.

iRacing profiel - FanaLEDs voor je racesimulatie displays en meer!


Acties:
  • 0 Henk 'm!

Verwijderd

SantjeS schreef op woensdag 07 juni 2006 @ 09:24:
Dit is meteen ook je oplossing mocht je een Singleton willen maken.

Een singleton, zoals de naam het al doet vermoeden, wil zeggen dat er maar één instantie is van de klasse. Iedereen die deze klasse aanroept kan geen nieuw geheugen van dit type klasse maken, maar kan alleen de bestaande instantie gebruiken.

Hoewel ik het in C# niet de fijnste oplossing vind is sealed(1.x) en static(2.0) een onmisbare mogelijkheid in deze taal.
:? Ik volg je gedachtes totaal niet. Static en singletons, en sealed classes? .. euhm .. :P

Zowiezo roep je statics overall nog steeds aan als class.method en niet als new class.method waarbij de singleton eigenschap nog steeds door de methode zelf wordt bepaald :)

[ Voor 13% gewijzigd door Verwijderd op 07-06-2006 09:51 ]


Acties:
  • 0 Henk 'm!

  • DirkT
  • Registratie: Juli 2002
  • Niet online

DirkT

toet

Klopt, singleton zou inderdaad met new class zijn instantie teruggeven, alleen overal waar ik op heb gezocht toen ik singeltons nodig had in C# kwam ik alleen uit op sealed. Dit is wel de 1.1 tijd geweest maar voor zover ik weet is er dus geen singleton op een andere manier te maken.

Mocht dat wel zo zijn ben ik erg benieuwd hoe :)

iRacing profiel - FanaLEDs voor je racesimulatie displays en meer!


Acties:
  • 0 Henk 'm!

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

Persoonlijk zou ik voor ongerelateerde functies met de static methode gaan. Wanneer je echter dingen nodig hebt als een database-wrapper of current-user-objecten zou ik weer singleton gebruiken. Aan jou de keus natuurlijk.

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:04
sealed wil gewoon zeggen dat je niet kan inheriten van die class. En dat kan bij een singleton wel handig zijn ja, aangezien je -imho- geen singleton meer hebt van een bepaald type als je dat type gaat inheriten.

Maar verder zie ik niet in welk verband je probeert te leggen ?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

whoami schreef op donderdag 08 juni 2006 @ 23:09:
aangezien je -imho- geen singleton meer hebt van een bepaald type als je dat type gaat inheriten.
Natuurlijk kan dat wel, als Base een singleton is, en Derived is daar een subclass van, dan betekent dat als je een Derived hebt dat je verder geen Bases meer mag maken. Er is dan nog altijd maar 1 Base, maar wellicht is dat ook een Derived.

Meestal wil je voor een dergelijke singleton ook het factory pattern gebruiken, zodat je in kunt stellen wat voor Base er nou eigenlijk aangemaakt moet worden.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Juist met een singleton lijkt me dat erg onhandig. Heb je ooit in je applicatie een base aangemaakt dan kun je nooit een derived aanmaken aangezien er maar 1 instantie is en deze dus niet vervangen wordt.

Over inherited singletons is in [rml][ PHP 5] Abstract protected constructor[/rml] wel wat te vinden (als mijn geheugen me niet in de steek gelaten heeft)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1