webForumDet fria alternativet

Delade variabler

.NETur .NET

58 svar · 1 796 visningar · startad av Gein · sida 2 av 3

NöffMedlem sedan nov. 2003569 inlägg
#21

Globala variabler finns ju i allra högsta grad i C#. Man deklarerar dom på klassnivå och instansierar dom i konstruktorn.

Men Jag tror inte Gein är ute efter att "suga ut" några publika variabler ur ett objekt som är instansierat ur en klass?.
Jag tror Gein menar att han sen ska instansiera andra klasser i sina metoder i sin egen klass och därigenom få del av sin egens klass globala variablerna i vart och ett av sin egens klass metoder.

GeinMedlem sedan sep. 20005 700 inlägg
#22

Nöff skrev:

Globala variabler finns ju i allra högsta grad i C#. Man deklarerar dom på klassnivå och instansierar dom i konstruktorn.

Men Jag tror inte Gein är ute efter att "suga ut" några publika variabler ur ett objekt som är instansierat ur en klass?.
Jag tror Gein menar att han sen ska instansiera andra klasser i sina metoder i sin egen klass och därigenom få del av sin egens klass globala variablerna i vart och ett av sin egens klass metoder.

Jag känner mej som ett stort frågetecken. Nu vet jag inte vad jag vill längre. Nikos exempel var hur som helst precis det jag var ute efter.

nikoMedlem sedan juni 20022 599 inlägg
#23

Nöff skrev:

Globala variabler finns ju i allra högsta grad i C#. Man deklarerar dom på klassnivå och instansierar dom i konstruktorn.

Du säger emot dig själv. Om de är deklarerade på klassnivå så är de ju per definition inte "globala".

Nöff skrev:

Jag tror Gein menar att han sen ska instansiera andra klasser i sina metoder i sin egen klass och därigenom få del av sin egens klass globala variablerna i vart och ett av sin egens klass metoder.

Kan du formulera om den meningen så att den betyder nåt?

renholmMedlem sedan apr. 20012 266 inlägg
#24

Gein skrev:

Vimp skrev:

Köp en bok om OOP :)

Jaja, men vilken? Rekommendera gärna.

http://www.lava.se/max/ :)

Har tyvärr inget seriöst förslag men det finns lite läsning på https://www.idg.se/webstudio, vet dock intehur bra de är då jag själv inte läst igenom dem.

/red: fixade en av länkarna

NöffMedlem sedan nov. 2003569 inlägg
#25

...

Du säger emot dig själv. Om de är deklarerade på klassnivå så är de ju per definition inte "globala".

Det är precis det dom blir. Var har du lärt dig objektorienterad programmering nånstans?. Alla objekt som deklareras på klassnivå blir globala och kan användas i alla klassens metoder.

Kan du formulera om den meningen så att den betyder nåt?

Läs den igen.

UlfTMedlem sedan maj 20018 027 inlägg
#26

Nöff skrev:

...

Du säger emot dig själv. Om de är deklarerade på klassnivå så är de ju per definition inte "globala".

Det är precis det dom blir. Var har du lärt dig objektorienterad programmering nånstans?. Alla objekt som deklareras på klassnivå blir globala och kan användas i alla klassens metoder.

När man talar om globala variabler, brukar man normalt mena att variablerna kan användas överallt i hela programmet. Variabler som deklareras i en klass, kommer man åt från just den klassen. Inte konstigare än med variabler som deklareras inom en funktion. De kommer man åt inom den funktionen.

Nöff skrev:

Kan du formulera om den meningen så att den betyder nåt?

Läs den igen.

Nöff skrev:

Jag tror Gein menar att han sen ska instansiera andra klasser i sina metoder i sin egen klass och därigenom få del av sin egens klass globala variablerna i vart och ett av sin egens klass metoder.

Varför skulle Gein mena att han ska instansiera klasser i en klass, för att från denna klass komma åt variabler som är deklarerade i den klassen? Verkar det inte troligare att han vill ha variabler som man kan komma åt från hela projektet? Variablerna inom aktuell klass, kommer han ju redan åt, oavsett vilka klasser han väljer att instansiera i den klassen. Men jag kan ju förstås ha missuppfattat vad du menade, eftersom du kanske menar något annat än det du skriver.

PhorpherMedlem sedan feb. 20002 300 inlägg
#27

De blir "globala" för klassen men inte för hela systemet. Stor skillnad...

Marcus EMedlem sedan maj 20021 466 inlägg
#28

Det beror ju på om de statiska klassmedlemmarna är privata eller publika

De publika medlemmarna kan sägas vara globala eftersom det går att komma åt dem från hela systemet. De är dock inte globala eftersom de tillhör en viss klass. Globala variabler är klasslösa och finns inte i C#. Om medlemmarna är privata går det endast att komma åt dem inom klassen.

Fast det här vet ni ju redan.

NöffMedlem sedan nov. 2003569 inlägg
#29

Jag blir bara helt matt. Jag sitter ju och citerar från 2 böcker.
Globala variabler deklarerar man såhär i winforms, det har inte att göra med om dom är public eller private:

public class Form1 : System.Windows.Forms.Form
{
	private int global; //deklarerad på klassnivå
		
	private Form1()
	{
		global=5; //tilldela den ett värde i konstruktorn
	}

	private void metod1()
	{
		global+=1; //och kan användas i alla klassens metoder
	}
}

Det är detta som alltid varit definitionen globala.

UlfTMedlem sedan maj 20018 027 inlägg
#30

Nöff skrev:

Jag blir bara helt matt. Jag sitter ju och citerar från 2 böcker.

Trots att du är matt, orkar du nämna vilka böcker du citerar?

Nöff skrev:

Globala variabler deklarerar man såhär i winforms, det har inte att göra med om dom är public eller private:

public class Form1 : System.Windows.Forms.Form
{
	private int global; //deklarerad på klassnivå
		
	private Form1()
	{
		global=5; //tilldela den ett värde i konstruktorn
	}


	private void metod1()
	{
		global+=1; //och kan användas i alla klassens metoder
	}
}

Det är detta som alltid varit definitionen globala.

Det är detta som är så besynnerligt med vad du skriver. Globala variabler har nämligen alltid definierats som variabler som man kan nå från vilken del av programmet som helst. Här har du Wikipedias definition: http://en.wikipedia.org/wiki/Global_variable
Det ska väl påpekas att den är skriven utifrån procedurorienterade språk. Men den naturliga överföringen till objektorientering, är i vilket fall som helst att variabeln kan nås från hela programmet. Vill du se lite modernare användning av begreppet, kan du kolla i vilka sammanhang Microsoft talar om globala variabler: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/comsrv2k/htm/cs_rp_bizdeskutils_kymy.asp
Vad jag kan, se är ingen av dessa definierad inom någon klass. Istället kan man nå dem från hela systemet. Alltså den gamla traditionella definitionen av globala variabler.

nikoMedlem sedan juni 20022 599 inlägg
#31

Nöff skrev:

Det är detta som alltid varit definitionen globala.

Så din högst privata definition av "global variabel" sammanfaller alltså helt med din definition av "medlemsvariabel"? Det får du naturligtvis tycka även om de flesta skulle anse det förvirrande och opraktiskt. Men i vilket fall som helst:

Det var redan i sitt inledande inlägg som Gein skrev:

Globala variabler finns ju inte i C#. Om jag nu behöver något liknande, hur går jag tillväga?
..
Jag behöver lagra ner lite blandad information som diverse klasser ska ha tillgång till.

(Min fetstil)

Han efterlyser alltså en "emulering" av globala variabler i den traditionella bemärkelsen och det var vad han fick. Varför då fortsätta dividera?

GladhMedlem sedan maj 20012 812 inlägg
#32

Kan bara hålla med UlfT. Jag hade nog slängt dina 2 böcker i soptunnan eller något.

Global variabler är per definition variabler som kan nås från hela programmet.

Att du gör dina variabler global i din klass är inte samma sak. I det exempel som du använder dig av kan du inte från Form2 komma åt och använda variablen global. Alltså är den inte global i ditt program även om den är global i din klass.

Jämför med världen du har en värld och 2 länder. ClassSverige och ClassDanmark.

Om du skapar en variabel i ClassSverige så är den inte tillgänglig i ClassDanmark och är därför inte Global, möjligtviss Nationell men inte global.

Den är dock Global i sverige eftersom vilken funktion som helst kan nå den. Alltså både funSkåne och funLappland kan använda sig av variablen.

- Magnus

NöffMedlem sedan nov. 2003569 inlägg
#33

Trots att du är matt, orkar du nämna vilka böcker du citerar?

1. C# & .Net Windowsprogrammering i Visual Studio.NET Docendo
2. Börja med C# Karli Watson Wrox.

Jag ska citera ordagrant när jag kommer hem.

Vad jag kan, se är ingen av dessa definierad inom någon klass. Istället kan man nå dem från hela systemet. Alltså den gamla traditionella definitionen av globala variabler.

Ulf, i Winforms så är ditt system, program, kalla det vad du vill, din klass, allt du gör i C# är definierat inom en klass. Det är därför det heter objektorientad programmering.
Och du har förmodligen förväxlat Application variablar med "global". Ni är lite insnöade på webprogram här märker jag.

Här har du Wikipedias definition: http://en.wikipedia.org/wiki/Global_variable

"In computer programming, a global variable is a variable that does not belong to any subroutine in particular; therefore can be accessed from any point in a program."

Det står ju hur tydligt som helst, i C# OOP så är mitt Program min Klass om ni inte upptäckt det ännu.

Alltså är den inte global i ditt program även om den är global i din klass.

Mitt program Är min klass

Global variabler är per definition variabler som kan nås från hela programmet.

Men Gladh. Ditt program är ju din klass, fixa upp ett winforms och titta hur det är definierat, först namespacet sen klassdefinieringen och sen klassens konstruktor. Det är ju detta som är ditt program. Hela detta missförstånd måste bero på att ni suttit för mycket med asp.net applikationer tror jag.

UlfTMedlem sedan maj 20018 027 inlägg
#34

Nöff skrev:

Det står ju hur tydligt som helst, i C# OOP så är mitt Program min Klass om ni inte upptäckt det ännu.

Alltså är den inte global i ditt program även om den är global i din klass.

Mitt program Är min klass

Jo, men det betyder ju inte att du kommer åt dessa variabler från några andra klasser som programmet använder sig av. En verklig, global variabel, ska du ju komma åt från hela programmet, alltså även från de hjälpklasser som du använder dig av, utöver huvudklassen.

spangoMedlem sedan juni 20008 205 inlägg
#35

Nöff skrev:

"In computer programming, a global variable is a variable that does not belong to any subroutine in particular; therefore can be accessed from any point in a program."

Det står ju hur tydligt som helst, i C# OOP så är mitt Program min Klass om ni inte upptäckt det ännu.

När du slutar koda enbart Hello World-applikationer kommer du raskt inse att alla Riktiga Program innehåller fler än en klass, så det är inte riktigt relevant. Om man skulle anpassa ditt citat till OO-språk skulle det säga att globala variabler är variabler som inte tillhör någon klass eller metod. Vilket innebär att riktiga OO-språk som Java eller C# inte har globala variabler, även om publika statiska variabler går utmärkt att använda i stället.

PhorpherMedlem sedan feb. 20002 300 inlägg
#36

Okej. Vi går på din defintion av "global". Dvs. det spelar ingen roll hurvida en medlemsvariabel (Öhh, Ursäkta, global variabel... :OO ) är private eller public.

public class main
{
      Katt kissekatt = new Katt(5);
      Hund voffeloff = new Hund(true);
     
      public main()
      {
            /* [B]Nöff:[/B] Var god fyll i kod här för att komma åt dina GLOBALA variabler i klasserna Katt och Hund. */
      }
}

public class Katt
{
     private int alder;

     public Katt(int alder)
     {
         this.alder = alder;
     }
}

public class Hund
{
     private bool kuperad;

     public Hund(bool kuperad)
     {
         this.kuperad = kuperad;
     }
}

Ja, jag är väl medveten om att koden inte går igenom en kompilering... ;)

Nöff skrev:

Och du har förmodligen förväxlat Application variablar med "global". Ni är lite insnöade på webprogram här märker jag.

*ler* Jag tänker inte ens kommentera det där... ;)

PaceMedlem sedan juni 20019 024 inlägg
#37

Nöff skrev:

Jag blir bara helt matt. Jag sitter ju och citerar från 2 böcker.
Globala variabler deklarerar man såhär i winforms, det har inte att göra med om dom är public eller private:

[3]
public class Form1 : System.Windows.Forms.Form
{
	private int global; [b]//deklarerad på klassnivå[/b]
		
	private Form1()
	{
		global=5; //tilldela den ett värde i konstruktorn
[...][/3]

Du argumenterar mot dig själv ganska kraftigt. Först är en global, sedan är den på klassnivå. ;)

Nöff skrev:

Ni är lite insnöade på webprogram här märker jag.

Hade vi pratat webbprogram hade en global variabel varit hur enkel som helst att skapa:

Application("global") = "wee"

Applicaton("global") går sedan att komma åt från hela webbapplikationen - oavsett klass.

Och du kan lägga en global variabel i web.config - då kommer du åt den lika enkelt som Application-objektet.

Jag tror du behöver släppa böckerna och börja tänka lite själv i stället. Objektorierntering är faktiskt ganska logiskt uppbyggt.

OveRRidEMedlem sedan feb. 200112 078 inlägg
#38

Maken till mängden olika tolkningar på ett så förhållandevis litet ämne har jag då aldrig varit med om. :D

nikoMedlem sedan juni 20022 599 inlägg
#39

Pace skrev:

Nöff skrev:

Ni är lite insnöade på webprogram här märker jag.

Hade vi pratat webbprogram hade en global variabel varit hur enkel som helst att skapa:

Application("global") = "wee"

Och därmed känns det som om cirkeln är väldigt sluten. Current.Application är nämligen inget annat än en publik statisk medlemsvariabel i den "sealade" klassen HttpContext. Exakt samma sak som vi kom fram till redan på sida ett, alltså.

(HttpContext.Current.Application läggs sen automatiskt över i Page.Application så att man kan referera till den utan punktnotation innifrån webformklassen.)

PaceMedlem sedan juni 20019 024 inlägg
#40

Jo förvisso, men skillnaden är att den klassen ingår i ramverket, precis som AppSetting gör. Det är alltså bättre (min åsikt ;)) att betrakta det som en global variabel än en egen hemsnickrad variant.

278 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
141 ms — hämta forumlista (db)
123 ms — hämta statistik (db)
144 ms — hämta tråd, inlägg och bilagor (db)