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


Objekt Åtkomst

Postades av 2004-08-08 18:40:59 - August Gustavsson, i forum c# (c-sharp), Tråden har 17 Kommentarer och lästs av 990 personer

Hej!
Jag stöter ofta på "problemet" att jag behöver komma åt en variabel i en övre klass från ett nästlat objekt. Kanske låter konstigt, här är ett kod exempel:

<code>
public class MasterClass
{
private SubClass sub;

//Detta är en viktig int som ändras ofta och som är mycket viktig för EnFunktion()
private int ViktigInt;
}


public class SubClass
{
//Eftersom denna funktion är private och att den ändå bara anropas från andra funktioner som inte har tillgång till "ViktigInt" finns det ingen mening med att göra den public
private void EnFunktion()
{
//ViktigInt behövs för dom avancerade beräkningarna här
}
}
</code>

Hur ska jag göra för att EnFunktion() ska få tillgång till ViktigInt hela tiden utan att behöva skicka med hela MasterClass till SubClass's konstruktor? För att sedan göra ViktigInt public och sedan komma åt den så här i SubClass:
<code>
public class SubClass
{
private MasterClass mc;

public SubClass(MasterClass mc)
{
this.mc = mc;
}

//Eftersom denna funktion är private och att den ändå bara anropas från andra funktioner som inte har tillgång till "ViktigInt" finns det ingen mening med att göra den public
private void EnFunktion()
{
//ViktigInt behövs för dom avancerade beräkningarna här
EnAnnanInt = mc.ViktigInt * 47598;
}
}
</code>

Att behöva skicka med en masterclass är ju inte särskilt smidigt... Finns det ingen bättre lösning på detta? Jag stöter på det hela tiden!!


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-08 19:10:29 - Oskar Johansson

Det bästa är nog att göra så som du säger, att skicka med huvudklassen. De vet ju nämligen ingenting om varandra annars... En variant är att göra den där variabeln statisk, men om du då har flera instanser av huvudklassen så har du skaffat dig huvudvärk...


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-08 19:48:57 - August Gustavsson

Det kanske är den bästa lösningen... vad vet jag? Jag bara tycker att koden blir så "smutsig" när man har det så, man skickar med så mycket mer information än vad som behövs om man skickar med hela huvudklassen.


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-08 20:15:42 - Oskar Johansson

Skicka med objektet i funktionen då


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-08 21:12:03 - Per Persson

Räcker det inte att skicka över ViktigInt till konstruktorn?


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-09 09:16:38 - Marcus Gus

<b>Räcker det inte att skicka över ViktigInt till konstruktorn?</b>

Tycker jag låter bäst hitills. Subclass borde ju inte behöva ha någon kännedom om MasterClass, utan det enda den verkar behöva är ju integern.


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-09 11:05:34 - Johan Normén

August

Du använder din sub klass i en metod i din Masterklass? då kan du i din EnFunction bara ta en inputparameter där du skickar in din ViktigInt då MasterClassen har tillgång till dess värde.


<code>
public class MasterClass
{
private SubClass sub;

//Detta är en viktig int som ändras ofta och som är mycket viktig för EnFunktion()
private int ViktigInt;

private void GörNått()
{
sub.EnFunction(ViktigInt);
}
}

public class SubClass
{
public void EnFunction(int viktigtInt)
{
//Gör saker...
}
}
</code>

Om SubKlassen gör saker som är starkt relaterade till Master klassen kan du lika gärna skita i att skapa en Sub klass och lägga EnFunktion i Master klassen i stället.

<code>
public class MasterClass
{
//Detta är en viktig int som ändras ofta och som är mycket viktig för EnFunktion()
private int ViktigInt;

public void EnFunction(ViktigInt)
{
//Gör nått...
}
}
</code>

Då jag inte vet vad du vill göra är det svårt att säga exakt hur du skall bygga. Du har i ditt kod ex satt SubKlass i Master som global? varför? någon spec syfte? du väljer att ha en SubKlass som har en funktion som du troligen kunnat lägga i MasterClass. Dock svårt att veta då du säkerligen kommer ha andra namn än de du angett. Så på ett sätt kan du inte ställa frågan som du gör då vi inte vet vad du tänkt ha det till. Kan mycket väl vara så att du skall skivka Master klassen in i Sub eller kanske to m sätta ViktigInt som en property. Kanske to m så att din viktig int kan sättas i en enitet som du skickar runt...

Mvh Johan


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-13 02:13:59 - August Gustavsson

Jag kan inte bara skicka över ViktigInt till sub klassens konstruktor eftersom den hela tiden ändras, typ 100 ggr i sekunden. Och jag kan inte ha viktigint som en parameter till EnFunktion() ( = void EnFunktion(int ViktigInt) ) eftersom koden som anropar kommer ifrån subklass.

Vi kan nog inte komma fram till nån bra lösning nu, bara tänkte att någon kanske kände igen sig i mitt problem. Och att ta fram ett exempel skulle ta en sjudundrans :P massa tid eftersom det är ett så stort program... (spel) Det närmar sig 6000 rader kod nu... >_<


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-13 08:20:26 - Johan Normén

August.

När man fastnar i sådana frågor som du just nu gjort, måste man tyvärr i många fall omstrukturera koden. Refactorera den, ändra det betéende den har. Det hela kan handla om bristande förståelse över hur man egentligen ville att det skulle fungera. Att då lösa fast sig och göra en massa workarrounds m.m. skapar bara oreda i koden, onödig kod och till slut spagetti.

Jag har säket vart med om ditt problem, men har då oftast gjort någon omstrukturering. Dock anser jag att ditt problem är inte bara det lilla du talar om utan ännu större då du har ett mer komplext system runt om (Spelet) som ställer krav på saker och ting. I ditt fall är det mer att du vill skapa en hamburgare utan att du vet dess ingridienser och frågar om någon kan hjälpa dig utan att denna vet avad du vill ha på. Jag förstår mycket väl att du inte kan slänga ut en massa exempel då det säkerligen ligger en uppsats bakom varför du vill ha det som du vill ha det. Mitt tips är att du ser genom så du inte tänkt fel, kolla om du kan justera eller flytta saker, om det inte går gör det som ger dig en fungerande lösning.

Jag hoppas det löser sig.

Mvh Johan


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-14 23:51:13 - August Gustavsson

Du har nog rätt i det du säger. Bara det att jag kan inte komma på nåt annat sätt att skriva koden. Jag har bara en fråga, brukar du aldrig skicka med classen där objectet skapas till objectets kontruktor som ett argument?


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-15 02:34:07 - Johan Normén

August .

Hej, jag skickar absolu tmed klasser in i kontrusktorer iböand, beror helt och hållet på varför, om jag kör delegate, (inter delagets utan använder klassens metode i klassen typ... ) eller så är det entiteter jag skickar in, klasser med data som jag nyttjar för funktionalitet. Ibland skickar jag även med klasser in för att sedan be klassen som tog emote dem att skicka dem vidare, proxy klasser eller något liknande. Det beror helt och hållet på vad jag vill komma åt och vad berättelsen berättar.

mvh Johan


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-15 22:52:53 - Nils Nilsson

Kan du inte implementera en event listener i din subklass och registrera listenern i din master class så kan master klassen notifiera alla listeners när en uppdatering av viktig int har skett?

/Nils


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-18 20:58:10 - August Gustavsson

Har lurat er lite granna.... :) Viktig int är i skälva verket en function. Så här; jag skickar med ett object till en konstruktor för att kunna komma åt dess functioner, grejjen är att jag skickar med den klassen som skapar objectet till objectets konstruktor. (Det object jag pratar om e hela tiden samma, blev en virrig text) I vilket fall betyder det att jag skapar en del object så här: Mojjsen hej = new Mojjsen(this, 56, 765); Till exempel asså. är det vanligt? Är det fel i mitt tänkande om inkapsling?


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-19 22:25:17 - Nils Nilsson

Är viktigInt static?

Kan du inte ge ett exempel på när du använder det och hur det ser ut i kod?

/Nils


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-20 21:58:44 - August Gustavsson

ViktigInt var inte hela sanningen, det var ett tag sen jag programmerade i det projectet och jag blandade ihop saker, men problemet är fortfarande kvar... Fast ViktigInt är en funktion...

<code>
public class Car
{
private Motor motor;

public Car()
{
motor = new Motor(this);

BRAKAPÅ();
}

private void BRAKAPÅ()
{
while(1)
{
motor.BULLEROCHBRAK();
}
}


public void BULLER()
{
//DENNA FUNCTION ANVÄNDS AV MÅNGA NÄSTLADE KLASSER I CAR, MEN DEN KAN INTE VARA STATISK FÖR DEN ANVÄNDER OSTATISKA MEDLEMMAR
//Mycket buller
}

}

public class Motor
{
private Car car;

public Motor(Car car)
{
this.car = car;
BULLEROCHBRAK();
}

public void BULLEROCHBRAK()
{
car.BULLER();
}
}

</code>
Kom ihåg att detta är ett klent exempel. Men det är ungefär så här koden är uppbyggd, bara att det är andra namn i riktiga.

PROBLEMET:
Det är just denna kodraden jag funderar över:
<code>
motor = new Motor(this);
</code>
Är det rätt att göra så bara för att komma åt ett par funktioner i basklassen (motor vill komma åt funktioner i this (car))?!?!?


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-21 09:12:50 - Walle Hallman

Hej

Jag skulle nog göra så, men det beror lite på hur vad det är för objekt och vad objektet har för "ansvar" i programmet. Men jag skulle nog skapa ett interface IBuller så att du kan använda klassen på fler ställen.
Men lite fel känns det dock mest för att bullerochbrak bara ropar på car.buller().
Kanske buller ligger i fel klass? Kanske skapa en ny klass där du skickar in all de sakerna som bullrar. Och när det bullrar så bullrar allesammans.. mycket buller blir det..
Alternativ så skulle jag använda mig av events eller subscriber/publisher (som gör samma som events) tillsammans med interface

Lite patterns som kanske kan vara intressanta
http://www.dofactory.com/patterns/PatternChain.aspx
http://www.dofactory.com/patterns/PatternObserver.aspx


Svara

Sv: Objekt Åtkomst

Postades av 2004-08-21 13:05:50 - Per Persson

Skulle det inte kunna vara idé att köra med nästlade klasser? Om Motor bara används inne i Car, så finns det väl ingen anledning att ha den fristående?


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 159
27 952
271 704
1 143
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