[C#] Internal classes met public properties

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Als een je een class internal maakt is de class alleen binnen de assembly beschikbaar dus kunnen de properties en functions van de internal class niet worden benaderd buiten de assembly ook al zijn ze public.


C#:
1
2
3
4
5
6
7
8
    internal class TestClass
    {
        public string Name
        {
            get;
            set;
        }
    }



Het zelfde effect krijg je als je de propery zelf ook internal maakt.

C#:
1
2
3
4
5
6
7
8
    internal class TestClass
    {
        internal string Name
        {
            get;
            set;
        }
    }


Maar wat is nu de beste manier? wat is netjes? alles van een internal class ook een internal modifier meegeven of alles wat in een internal class gewoon public laten omdat het toch niet beschikbaar is buiten de assembly?

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Nu online
Tja, ik heb me dezelfde vraag ook al eens gesteld ....

Meestal ga ik gewoon de class internal maken, en laat ik de properties / members wel public. Het vraag dan wat minder werk als je class later toch public zou moeten zijn :P

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Wat denk je van
C#:
1
2
3
4
public class TestClass
{
  internal string Name { get; set; }
}


Waarbij je aangeeft dat Name enkel intern op te vragen is, maar de rest van de klasse publiek beschikbaar is.

Gebruik dus internal classes met public members of public classes met internal members.

ASSUME makes an ASS out of U and ME


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Nu online
Euh, dat is een heel andere situatie dan hetgeen waar de TS het over had ? :?

De topicstarter had het over classes die internal zijn. De volledige class mag dus niet zichtbaar / bruikbaar zijn in een andere assembly.
Ik vermoed dat de vraag van de TS was (althans, zo heb ik ze geinterpreteerd) :
- Als je class internal is, is het dan beter / netter om ook alle members van die class minstens een internal access modifier te geven ? maw: moet de max. access modifier van een internal class ook internal zijn

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Data-base
  • Registratie: Maart 2007
  • Laatst online: 07-09 10:33
Ik vind het neit meer dan logisch dat het zo is.

Als je classe zelf internal is, is de klasse dus niet zichtbaar van buitenaf, en dus ook niet de properties. Dat lijkt me volledig gewenst.

Dat was jij wil is een public classe met een internal(of protected/private) constructor.

En natuurlijk public properties die wel zichtbaar moeten zijn. 8)7

[ Voor 11% gewijzigd door Data-base op 07-09-2008 16:22 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:13
Als het zo werkt dat alle members van een internal klasse automatisch ook internal zijn, dan is het expliciet specificeren van internal redundant en zou ik het dus weglaten, tenzij er belangrijke redenen zijn om het nog eens expliciet te specificeren (b.v. als het de leesbaarheid/onderhoudbaarheid zou vergroten, waar hier i.m.o geen sprake van is).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
whoami schreef op zondag 07 september 2008 @ 10:59:
Euh, dat is een heel andere situatie dan hetgeen waar de TS het over had ? :?

De topicstarter had het over classes die internal zijn. De volledige class mag dus niet zichtbaar / bruikbaar zijn in een andere assembly.
Ik vermoed dat de vraag van de TS was (althans, zo heb ik ze geinterpreteerd) :
- Als je class internal is, is het dan beter / netter om ook alle members van die class minstens een internal access modifier te geven ? maw: moet de max. access modifier van een internal class ook internal zijn
Dat is inderdaad precies wat ik bedoel.
Soultaker schreef op zondag 07 september 2008 @ 16:57:
Als het zo werkt dat alle members van een internal klasse automatisch ook internal zijn, dan is het expliciet specificeren van internal redundant en zou ik het dus weglaten, tenzij er belangrijke redenen zijn om het nog eens expliciet te specificeren (b.v. als het de leesbaarheid/onderhoudbaarheid zou vergroten, waar hier i.m.o geen sprake van is).
Als je in een internal class properties geen access modifier meegeeft dan zijn ze private, private properties zijn alleen in de class zelf beschikbaar en dus niet door de hele assembly.

Het is dus verplicht om de access modifier public of internal te gebruiken en ze geven beide het zelfde effect.

Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 15-09 16:19

alienfruit

the alien you never expected

Ik gebruik internal voor interne klasses binnen de assembly. In een component gebruik ik een Dependency-klasse om de afhankelijkheden tussen items (van wel publieke datastructuur) aan te geven. Omdat deze klasse en zijn manager alleen voor intern gebruik is. Maak ik deze internal. Omdat deze toch niet bruikbaar zijn buiten de assembly bijv. in de applicatie zelf.

Ik gebruik namelijk een dependecy tree om de reeks afhankelijk canvas-objecten te koppelen aan een specifieke model item.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 03:13
Verwijderd schreef op zondag 07 september 2008 @ 17:26:
Als je in een internal class properties geen access modifier meegeeft dan zijn ze private, private properties zijn alleen in de class zelf beschikbaar en dus niet door de hele assembly.
Het is dus verplicht om de access modifier public of internal te gebruiken en ze geven beide het zelfde effect.
Ah ok, het werkt dus zoals ik vermoedde. :)

In dat geval zou ik nog steeds de methoden public maken; de intentie is immers dat iedereen die toegang heeft tot de klasse, ook toegang heeft tot de velden van die klasse (anders zou je ze private of protected maken). Dat in dit geval alleen classes uit dezelfde assembly toegang hebben tot de klasse doet daar niet aan af. Verder vind ik het gevoelsmatig logischer dat de velden helemaal public zijn als je het internal keyword van de klasse af zou halen.

Ik denk overigens dat de vraag die je in de TS stelt ("Wat is de beste manier? Wat is netjes?") niet eenduidig te bepalen is. Je hebt er zelf blijkbaar al goed over nagedacht en (terecht) geconcludeerd dat twee opties min of meer op hetzelfde neerkomen, dus ik kan me niet voorstellen dat iemand overtuigend kan beargumenteren waarom de ene of de andere optie superieur zou zijn.

Neemt niet weg dat het interessant kan zijn om te peilen wat andere programmeurs in dit soort situaties doen, maar veel meer dan dat zal het niet worden, ben ik bang. :)

Acties:
  • 0 Henk 'm!

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

whoami schreef op zondag 07 september 2008 @ 10:59:
Euh, dat is een heel andere situatie dan hetgeen waar de TS het over had ? :?

De topicstarter had het over classes die internal zijn. De volledige class mag dus niet zichtbaar / bruikbaar zijn in een andere assembly.
Ik vermoed dat de vraag van de TS was (althans, zo heb ik ze geinterpreteerd) :
- Als je class internal is, is het dan beter / netter om ook alle members van die class minstens een internal access modifier te geven ? maw: moet de max. access modifier van een internal class ook internal zijn
Ik probeerde enkel het verschil aan te tonen tussen internal op class niveau en internal op member niveau. Als je dus tussen de regels leest wil ik zeggen dat je voor de TS zijn doel een internal class met public members gebruikt.

ASSUME makes an ASS out of U and ME

Pagina: 1