[C#] Submethode aanmaken.

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In zie vaak submethoden in verschillende ingebouwde .NET classes staan. Om even een voorbeeld te schetsen wat ik bedoel neem ik even de DateTime Class in C#.

Als je een instantie van een DateTime object hebt aangemaakt en die declareer je als DateTime.Now.AddHours(1), dan vraag ik mij af hoe dat zit met die AddHours method.

Ik ben namelijk nu zelf ook een class aan het maken waarbij ik een dergelijke methode wil gebruiken.
Ik heb de volgende class aangemaakt.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
{
    public class Result
    {
        private int _rowsFromFile;
        private int _rowsTblArticle;
        private int _rowsTblArticleGroup;

        public Result()
        {
            _rowsFromFile = 0;
            _rowsTblArticle = 0;
            _rowsTblArticleGroup = 0;
        }

        public int RowsFromFile
        {
            get
            {
                return this._rowsFromFile;
            }
            set
            {
                this._rowsFromFile = value;
            }
        }

        public int RowsTblArticle
        {
            get
            {
                return this._rowsTblArticle;
            }
            set
            {
                this._rowsTblArticle = value;
            }
        }

        public int RowsTblArticleGroup
        {
            get
            {
                return this._rowsTblArticleGroup;
            }
            set
            {
                this._rowsTblArticleGroup = value;
            }
        }
    }
}


Nu wil ik aan die verschillende properties nog een Add-method hangen, zodat ik de volgende code zou kunnen uitvoeren. Ik vraag me echter af hoe ik dat precies voor elkaar kan krijgen.

C#:
1
2
Result result = new Result();
result.RowsTblArticle.Add();


Hoe implementeer ik deze Add-method? Ik heb niet duidelijk informatie hierover kunnen vinden en zou ook niet goed weten hoe ik hiernaar moet zoeken.

Acties:
  • 0 Henk 'm!

  • Ruudjah
  • Registratie: November 1999
  • Laatst online: 06-09 20:58

Ruudjah

2022

"Now" is een property die een instantie van een klasse teruggeeft. Die klasse heeft dan weer een methode AddHours. Je moet dus een nieuwe klasse toevoegen met jouw gewenste "submethode", en dan een instantie terug geven via een property.

TweakBlog


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
In het geval van DateTime returned het .Now property gewoon weer een object. Je properties/methods kunnen dus prima een ander object teruggeven (en dus niet alleen maar ints/strings/etc. (primaries)) die dus elk weer hun eigen methods/properties hebben (en die weer, en die weer, ...).

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    public class Car
    {
        public string BrandName { get; set; }
        public Person Driver { get; set; }
        public int Wheelcount { get; set; }
    }

    public class Person
    {
        public string Name { get; set; }
        public Address Address { get; set; }
        public PhoneNumber Phone { get; set; }
    }

    public class Address
    {
        public string Streetname { get; set; }
        public string ZipCode { get; set; }
        public string Country { get; set; }


        public bool IsValid
        {
            get
            {
                //Do something
            }
        }
    }

    public class PhoneNumber
    {
        public string AreaCode { get; set; }
        public string Number { get; set; }
        public void Dial()
        {
            //Do something
        }
    }


C#:
1
2
Car c = new Car();
c.Driver.Phone.Dial();

[ Voor 62% gewijzigd door RobIII op 14-05-2009 11:17 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Zoals Ruudjah aangeeft is de Now een static property die een instance van DateTime terug geeft, en AddHours is gewoon een member function van DateTime. Dat ziet er bijvoorbeeld zo uit.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public struct DateTime
{
    //de daadwerkelijke value van de datetime
    private int ticks;

    public DateTime( int ticks )
    {
        this.ticks = ticks;
    }

    public static DateTime Now
    {
        get
        {
            return new DateTime( GetTicksFromSystem() );
        }
    }

    public DateTime AddHours( int hours )
    {
        return new DateTime( ticks + hours * ticksPerHour );
    }
}

[ Voor 8% gewijzigd door Woy op 14-05-2009 11:06 . Reden: Layout van code wat duidelijker gemaakt ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op donderdag 14 mei 2009 @ 11:00:
In het geval van DateTime returned het .Now property gewoon weer een object. Je properties/methods kunnen dus prima een ander object teruggeven (en dus niet alleen maar ints/strings/etc. (primaries)) die dus elk weer hun eigen methods/properties hebben (en die weer, en die weer, ...).

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    public class Car
    {
        public string BrandName { get; set; }
        public Person Driver { get; set; }
        public int Wheelcount { get; set; }
    }

    public class Person
    {
        public string Name { get; set; }
        public Address Address { get; set; }
        public PhoneNumber Phone { get; set; }
    }

    public class Address
    {
        public string Streetname { get; set; }
        public string ZipCode { get; set; }
        public string Country { get; set; }


        public bool IsValid
        {
            get
            {
                //Do something
            }
        }
    }

    public class PhoneNumber
    {
        public string AreaCode { get; set; }
        public string Number { get; set; }
        public void Dial()
        {
            //Do something
        }
    }


C#:
1
2
Car c = new Car();
c.Driver.Phone.Dial();
Ik denk dat ik aan bovenstaande het meest heb.

Ik kom er echter nog steeds niet helemaal uit.
Ik heb nu het volgende in mijn class staan.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
    public class Result
    {
        private RowResult _rowsFromFile = new RowResult();
        private RowResult _rowsTblArticle = new RowResult(); 
        private RowResult _rowsTblArticleGroup = new RowResult();

        public Result()
        {

        }

        public int RowsFromFile
        {
            get
            {
                return this._rowsFromFile._rowValue;
            }
        }

        public int RowsTblArticle
        {
            get
            {
                return this._rowsTblArticle._rowValue;
            }
        }

        public int RowsTblArticleGroup
        {
            get
            {
                return this._rowsTblArticleGroup._rowValue;
            }
        }
    }

    public class RowResult
    {
        public int _rowValue = 0;

        public void RowResult(int rowValue)
        {
            this._rowValue = 0;
        }

        public void Add()
        {
            this._rowValue = this._rowValue + 1; 
        }
    }


ik weet niet precies welke objecten ik waarvoor moet gebruiken.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Dan heb je mijn (erg basic) voorbeeld toch nog niet goed genoeg bekeken danwel begrepen ;) Kijk er nog eens goed naar ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:51

Haan

dotnetter

Als je
C#:
1
result.RowsTblArticle.Add();

wilt doen, moet je property RowsTblArticle geen int terug geven, maar bijv. een RowResult, en de class RowResult moet dan een methode Add() hebben :)

[ Voor 31% gewijzigd door Haan op 14-05-2009 12:08 ]

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Let inderdaad eens op het verschil in return type tussen jouw voorbeeld en die van RobIII of die van mij.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Haan schreef op donderdag 14 mei 2009 @ 12:04:
Als je
C#:
1
result.RowsTblArticle.Add();

wilt doen, moet je property RowsTblArticle geen int terug geven, maar bijv. een RowResult, en de class RowResult moet dan een methode Add() hebben :)
ik heb nu het volgende maar zodra de properties RowsFromFile wordt aangemaakt, krijg ik een StackOverflowException?

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    public class Result
    {
        public RowResult RowsFromFile
        {
            get
            {
                return RowsFromFile;
            }
        }
        public RowResult RowsTblArticle; 
        public RowResult RowsTblArticleGroup;

        public Result()
        {

        }
    }

    public class RowResult
    {
        public int _rowValue = 0;

        public void Add()
        {
            this._rowValue = this._rowValue + 1;
        }
    }

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wiedes; je returned in RowsFromFile de RowsFromFile property...welke de RowsFromFile zal gaan ophalen welke de RowsFromFile zal gaan ophalen welke de RowsFromFile zal gaan ophalen welke de RowsFromFile zal gaan ophalen welke de RowsFromFile zal gaan ophalen welke de RowsFromFile zal gaan ophalen welke de RowsFromFile zal gaan ophalen welke de RowsFromFile zal gaan ophalen welke de RowsFromFile... !@#*(^!@#STACK OVERFLOW(*&#^$

[ Voor 4% gewijzigd door RobIII op 14-05-2009 12:22 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op donderdag 14 mei 2009 @ 12:22:
Wiedes; je returned in RowsFromFile de RowsFromFile property...welke de RowsFromFile zal gaan ophalen welke de RowsFromFile zal gaan ophalen welke de RowsFromFile zal gaan ophalen welke de RowsFromFile zal gaan ophalen welke de RowsFromFile zal gaan ophalen welke de RowsFromFile zal gaan ophalen welke de RowsFromFile zal gaan ophalen welke de RowsFromFile zal gaan ophalen welke de RowsFromFile... !@#*(^!@#STACK OVERFLOW(*&#^$
Ik had eerst als return value RowsFromFile._rowValue, maar dan zegt hij dat hij beslist een RowResult wil returnen, terwijl als ik dat doe dus deze foutmelding krijg.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Sorry, maar doe eens even een stapje terug en probeer even de basis te begrijpen van waar je nu mee bezig bent. Niet dat het erg is dat je het nog niet helemaal snapt ofzo (we zijn allemaal ooit ergens begonnen) maar het is erg evident dat je de basis nog niet onder de knie hebt. En je leert er niets van als wij het je voorkauwen.
You can give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.
Verwijderd schreef op donderdag 14 mei 2009 @ 12:24:
maar dan zegt hij dat hij beslist een RowResult wil returnen
Nogal wiedes want je geeft zelf aan dat het return type een RowResult is...

[ Voor 22% gewijzigd door RobIII op 14-05-2009 12:27 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Kun je eerst eens uitleggen waarom je een "submethode" wilt gebruiken? Ze bestaan namelijk gewoon niet, en je begrijpt kennelijk niet wat C# properties zijn en doen, en dat het simpelweg een kwestie is van een property of methode die een object teruggeeft, waarop je weer methoden aan kunt roepen. Het is belangrijk dat je dit soort dingen eerst snapt, voordat je dingen gewoon maar gaat proberen.

Dus:
- C# is een OO taal, alles draait dus om objecten.
- Objecten hebben methoden en properties (wat eigenlijk gewoon gecombineerde get/set methoden zijn)
- Methoden kunnen objecten teruggegeven
- Op die objecten kun je weer aanroepen doen.

Dus: beschrijf eens in woorden (dus niet code) wat je wil, en ga van daaruit de oplossing zoeken.
RobIII schreef op donderdag 14 mei 2009 @ 12:26:
Sorry, maar doe eens even een stapje terug en probeer even de basis te begrijpen van waar je nu mee bezig bent. Niet dat het erg is dat je het nog niet helemaal snapt ofzo (we zijn allemaal ooit ergens begonnen) maar het is erg evident dat je de basis nog niet onder de knie hebt. En je leert er niets van als wij het je voorkauwen.
Bastard, beat me to it. :D

Ik vind dat er hier vaak te snel met "voorbeeldcode" gegooid wordt, en helemaal niet ingegaan wordt op het onderliggende probleem: De TS snapt echt niet waar 'ie mee bezig is, en voordat je code gaat voorkauwen moet eerst dat probleem opgelost zijn.

[ Voor 32% gewijzigd door Hydra op 14-05-2009 12:28 ]

https://niels.nu


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op donderdag 14 mei 2009 @ 12:26:
Sorry, maar doe eens even een stapje terug en probeer even de basis te begrijpen van waar je nu mee bezig bent. Niet dat het erg is dat je het nog niet helemaal snapt ofzo (we zijn allemaal ooit ergens begonnen) maar het is erg evident dat je de basis nog niet onder de knie hebt. En je leert er niets van als wij het je voorkauwen.


[...]
Als ik niet weet waar ik moet beginnen. Ik moet even een voorbeeld hebben, dan weet ik het voor een volgende keer.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op donderdag 14 mei 2009 @ 12:27:
[...]


Als ik niet weet waar ik moet beginnen. Ik moet even een voorbeeld hebben, dan weet ik het voor een volgende keer.
Dat voorbeeld heb je (en het hele internet is er van vergeven...)
Hydra schreef op donderdag 14 mei 2009 @ 12:26:
Ik vind dat er hier vaak te snel met "voorbeeldcode" gegooid wordt
Daarom is mijn "voorbeeldcode" ook een ander voorbeeld dan TS aandraagt. Ik kan zijn voorbeeld wel uitwerken maar dan leert 'ie niks.
Hydra schreef op donderdag 14 mei 2009 @ 12:26:
en helemaal niet ingegaan wordt op het onderliggende probleem: De TS snapt echt niet waar 'ie mee bezig is, en voordat je code gaat voorkauwen moet eerst dat probleem opgelost zijn.
Precies. Het is me echter, en ik denk velen met mij, nu even net iets teveel gedoe om het héle concept duidelijk te maken in een post. Daar is het simpelweg te veel voor. Daarom geef ik ook aan dat TS eerst even zelf de basis onder de knie moet krijgen; iets waar hij ons niet voor nodig heeft.

[ Voor 64% gewijzigd door RobIII op 14-05-2009 12:30 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Verwijderd schreef op donderdag 14 mei 2009 @ 12:27:
Als ik niet weet waar ik moet beginnen. Ik moet even een voorbeeld hebben, dan weet ik het voor een volgende keer.
Het is duidelijk dat simpelweg naar code kijken geen goed idee is. Als je naar code kijkt zonder de basisprinciepes van een OO taal te begrijpen, krijg je misvattingen als "submethodes". Probeer dus eerst je probleem te verwoorden. Als je je probleem niet in tekst op kunt schrijven, begrijp je je probleem niet.

https://niels.nu


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goed, ik doe het wel op een andere manier. Ik doe het wel weer op de manier zoals ik het altijd deed, dus een methode schrijven binnen de class Result, waarbij RowsFromFile met 1 wordt opgehoogd.

Dus bijvoorbeeld met de method:
C#:
1
2
3
4
Public void RowsFromFileAdd()
{
this.RowsFromFile = this.RowsFromFile + 1;
}


Ik heb namelijk nog nooit echt op die andere manier iets gedaan. Ik had een class RowResult geinstantieerd binnen de Result-class. Een methode Add toegevoegd die op zich ook wel werkt, alleen het returnen met die getters en setters begrijp ik niet helemaal.

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 20:51

Haan

dotnetter

* Haan vraagt zich af waarom je een methode nodig zou hebben om ergens 1 bij op te tellen

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 22:05
Build a man a fire and he'll be warm for a day, set a man on fire and he'll be warm for the rest of his life
>:)
Haan schreef op donderdag 14 mei 2009 @ 12:51:
* Haan vraagt zich af waarom je een methode nodig zou hebben om ergens 1 bij op te tellen
Als je iemand geen directe toegang wilt geven tot RowsFromFile? Of trap ik nu een open deur in? :P

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • Brainstorm
  • Registratie: November 2000
  • Laatst online: 20-09 13:56
Inderdaad, omdat die methode niet +1 doet, maar een rij o.i.d. toevoegt. Hoe dat dan precies geimplementeerd is, hoeft niet zichtbaar te zijn.

Programmer's Drinking Song: 99 little bugs in the code, 99 bugs in the code, Fix one bug, compile it again, 100 little bugs in the code. (go to start if bugs>0)


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Brainstorm schreef op donderdag 14 mei 2009 @ 13:05:
Inderdaad, omdat die methode niet +1 doet, maar een rij o.i.d. toevoegt. Hoe dat dan precies geimplementeerd is, hoeft niet zichtbaar te zijn.
Kan best, maar dat is niet wat in z'n voorbeeld gebeurt.

En ik vind het een beetje jammer dat de TS niks doet met wat hem aangereikt wordt.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
offtopic:
He niet mijn sig misbruiken :P

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Om even op je DateTime voorbeeld terug te komen.

C#:
1
DateTime tral = DateTime.Now.AddHours(1);


is niets anders als een shortcut voor

C#:
1
2
DateTime tral = DateTime.Now;
tral.AddHours(1);


Een zoekterm voor dit soort dingen: Factory Method. (Alleen is het toevallig in deze geimplementeerd door een property.)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 18-09 13:37

sopsop

[v] [;,,;] [v]

Hydra schreef op donderdag 14 mei 2009 @ 13:09:
[...]


Kan best, maar dat is niet wat in z'n voorbeeld gebeurt.

En ik vind het een beetje jammer dat de TS niks doet met wat hem aangereikt wordt.
Als ik naar zijn posthistorie kijk neemt de TS wel degelijk wat aan, maar is hij in ieder geval geen gever. Als de TS al reageert in een topic dat niet door hem is gestart, is het een vraag voor een eigen probleem over dat onderwerp. Niet bepaald iemand die het idee van een community snapt.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het is hier niet echt de plek om de post-geschiedenis van de TS te gaan bespreken. Als je wat op te merken hebt kan dat of in een TR of in het moderatie feedback topic.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Zullen we het ontopic houden en TS niet beginnen affakkelen?

edit:
* RobIII mept Woy

[ Voor 26% gewijzigd door RobIII op 14-05-2009 13:25 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1