raider000 Skrevet 5. november 2010 Del Skrevet 5. november 2010 Jeg er nybegynner i C# og har laget en liten side hvor jeg har flere ting som skjer på kommando - det med private void. Hvordan kan jeg la en variabel som er laget under f.eks. en knapp, gjelde under alle de forskjellige private void'ene jeg lager. Jeg trodde det var slik: public partial class MainPage : UserControl { public int intAntall2; } Den vil ikke regne med intAntall2 når jeg skal beregne det en annen plass. Hva er grunnen? Lenke til kommentar
Hårek Skrevet 5. november 2010 Del Skrevet 5. november 2010 Den kan bare brukes innenfor klassen MainPage, ikke i en annen klasse. Hvis du skal ha tilgang fra en annen klasse kan du lage en funksjon som returnerer intAntall2, eller du kan gjøre den om til en Property { get; set; } Alternativt kan du deklarere intAntall2 som static, da er den tilgjengellig som MainPage.intAntall2 Lenke til kommentar
raider000 Skrevet 5. november 2010 Forfatter Del Skrevet 5. november 2010 Den kan bare brukes innenfor klassen MainPage, ikke i en annen klasse. Hvis du skal ha tilgang fra en annen klasse kan du lage en funksjon som returnerer intAntall2, eller du kan gjøre den om til en Property { get; set; } Alternativt kan du deklarere intAntall2 som static, da er den tilgjengellig som MainPage.intAntall2 Kunne du skrivt dette opp som en kode? Jeg forstår det ikke. Lenke til kommentar
Hårek Skrevet 5. november 2010 Del Skrevet 5. november 2010 Eksempel: public partial class MainPage : UserControl { public int IntAntall2 { get; private set; } public MainPage() { IntAntall2 = 99; new SecondClass(this); } } public class SecondClass { public SecondClass(MainPage mp) { int tst = mp.IntAntall2; } } Lenke til kommentar
oddi Skrevet 14. november 2010 Del Skrevet 14. november 2010 Alternativt: Globals.cs namespace GlobalTest { public class Globals { public static int test = 1; } } Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace GlobalTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Globals.test = 5; textBox1.Text = Globals.test.ToString(); } private void button2_Click(object sender, EventArgs e) { Globals.test = 3; textBox1.Text = Globals.test.ToString(); } } } Lenke til kommentar
HDSoftware Skrevet 14. november 2010 Del Skrevet 14. november 2010 Det du må forstå er at en metode er et såkallt nytt SCOPE. Du kan se på et SCOPE som et nytt nivå i programmet ditt og alt du definerer i dette "scopet" vil kunn være tilgjengelig f.o.m. dette scopet. Se for deg følgende: Nivå1 { int a; Nivå2a { int b; a = 1; //Dette er tillat fordi Nivå2a kan se Nivå1 b = 2; // Dette er tillat fordi b er i samme scope } Nivå2b { a = 1; // Dette er også tillat fordi Nivå2b kan se Nivå1 b = 2; // Dette er ikke tillat fordi Nivå2b ikke kan se Nivå2a } a = 3; // Dette er tillat fordi a er i samme scope b = 4; // Dette er ikke tillat fordi b er totalt ukjent for dette nivået } Så er det dette med PUBLIC og PRIVATE Du definerer PUBLIC foran alt som skal være kjent på utsiden av et objekt. Det du prøvde på var å definere en PUBLIC inen i en metode. Du kan ikek definere egenskaper til en klasse inne i en metode. Disse må du definere i selve klassen MyClass CLASS { int a; // Dette er en privat egenskap som kunn er tilgjengelig i klassens metoder public b; // Dette er en public egenskap som er kjent utenfor klassen public void MyMethod() { public int abc; // Dette har ingen mening fordi abc kunn er en variabel int def; // Dette derimot er det mening i og variabelen def kan brukes i denne metoden } // Som betyr at: def = 123; // vil feile da dette IKKE er en egenskap, men som sagt, en variabel } Når jeg skal lage "globale variabler" så pleier jeg lage en public static klasse med navn GLOBAL public static class GlobaleData { public static int BrukerID; } Her vil "variablen" GlobalData.BrukerID være tillgjengelig over alt i programmet. Lag gjerne en egen DLL med slike ting og inkluder disse under References. Håper du får noe ut av dette... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå