30. april 2014 - 13:19
Der er
12 kommentarer og 1 løsning
With ... DO
Hej, I Delphi kan man lave en With XXX do altså f.eks.: With this.tChart1 do { Series.clear(); Series.RemoveAllSeries(); } Kan man lave noget tilsvarende i C#?? I koden herunder skal jeg gentage this.tChart1 MANGE gange og det bliver altså irriterende... Der vilo jeg gerne bruge en with do this.tChart1.Series.Clear(); this.tChart1.Series.RemoveAllSeries(); this.tChart1.BackColor = Color.White; this.tChart1.Walls.Back.Gradient.Visible = false; this.tChart1.Walls.Back.Color = Color.White; this.tChart1.Walls.Bottom.Gradient.Visible = false; this.tChart1.Walls.Bottom.Color = Color.White; this.tChart1.Panel.Gradient.Visible = false; this.tChart1.Panel.Color = Color.White; this.tChart1.Aspect.View3D = false; this.tChart1.Panel.Bevel.Outer = Steema.TeeChart.Drawing.BevelStyles.None; this.tChart1.Axes.Left.Automatic = true; this.tChart1.Axes.Bottom.Automatic = true; this.tChart1.Axes.Left.Title.Caption = ""; this.tChart1.Axes.Bottom.Title.Caption = ""; this.tChart1.Header.Text = ""; this.tChart1.Legend.Visible = false; this.tChart1.Legend.Shadow.Visible = false; this.tChart1.Legend.Font.Size = 14; this.tChart1.Legend.Symbol.Width = 50; this.tChart1.Legend.Symbol.Squared = true;
Annonceindlæg fra SoftwareOne
30. april 2014 - 13:30
#1
så det du siger er at du enten er doven eller ikke gider kigge på en masse kode-gentagelser ? du kan uden problemer skrive: var TC = this.tChart1; //<-- kopiere reference TC.Series.Clear(); TC.Series.RemoveAllSeries(); TC.BackColor = Color.White; TC.Walls.Back.Gradient.Visible = false; TC.Walls.Back.Color = Color.White; TC.Walls.Bottom.Gradient.Visible = false; TC.Walls.Bottom.Color = Color.White; TC.Panel.Gradient.Visible = false; TC.Panel.Color = Color.White; TC.Aspect.View3D = false; TC.Panel.Bevel.Outer = Steema.TeeChart.Drawing.BevelStyles.None; TC.Axes.Left.Automatic = true; TC.Axes.Bottom.Automatic = true; TC.Axes.Left.Title.Caption = ""; TC.Axes.Bottom.Title.Caption = ""; TC.Header.Text = ""; TC.Legend.Visible = false; TC.Legend.Shadow.Visible = false; TC.Legend.Font.Size = 14; TC.Legend.Symbol.Width = 50; TC.Legend.Symbol.Squared = true;
30. april 2014 - 13:30
#2
30. april 2014 - 13:51
#3
var TC = this.tChart1; //<-- kopiere reference er ikke en kopi af referencen, men betyder at TC og tChart1 nu peger på præcis det samme. Der er mange måder at sætte default værdier på et objekt, men ovenstående virker umiddelbart forkert.
30. april 2014 - 14:00
#4
this.tChart1 er en reference til et sted i memory hvor objektet befinder sig (Value) ved at sige TC = this.tChart1, så kopiere man referencen så begge variable pejer på samme memorysted. ergo hedder det også "copy by reference" eller på dansk kopi af referencen. havde det været værdien (fx med structs) fx: var a = 5; var b = a; så er det copy by value.
30. april 2014 - 14:14
#5
Netop:) Hvis de peger på samme sted i memory og du retter på dette, så påvirkes begge referencer. Det vil sige at når han gør følgende: this.tChart1.Axes.Left.Title.Caption = "Jeg er tChart1"; TC.Axes.Left.Title.Caption = "Jeg er TC"; så vil både tChart og TC have "Jeg er TC" stående i caption. - men hvis det er det spørger vil have så er det jo fint og blot mig som har misforstået spørgsmålet:)
30. april 2014 - 14:16
#6
/me tager sig til hovedet...
30. april 2014 - 14:20
#7
Tja, hvis jeg forstår det rigtigt så er TC en pointer og det er det jeg gerne vil have.. Dvs. hvis jeg ændrer i properties til TC så vil det også ændre i properties til tChart...
30. april 2014 - 14:26
#8
nemlig.. C# er default copy by reference ved objekter og byvalue på structs.
30. april 2014 - 14:35
#9
montago du behøver skam ikke tage dig til hovedet;) Min pointe var blot om det overhovedet var det spørger ønskede - og det var det så:) Derfor er alt ok!
30. april 2014 - 19:39
#10
WITH er en feature som opfundet i Pascal og som de fleste sprog i Pascal familien har bl.a Modula-2 og Oberon, men Ada har den dog ikke. WITH er ikke originalt en del af BASIC, men MS tilfoejede det til Visual Basic familien. WITH er naesten ukendt i C familien - hverken C, C++, Java eller C# har den. JavaScript har den, men den er ikke velset blandt JavaScript programmoerer (deprecated). Personligt synes jeg at det er en glimrende feature, men .....
Hej Arne_V, Tja, som sædvanligt nogle fine kommentarer men jeg har allerde givet point - vil du gerne at jeg opretter endnu et spørgsmål som du så kan få point for??
Andre har svaret paa det du spurgte om nemlig hvordan du i C# laver det som du laver i Pascal med WITH. Jeg har bare forklaret lidt om den historiske baggrund for WITH. Saa ingen grund til at give mig point.
Using i C# minder lidt om With med den forskel at deklarationen kun eksistere i scope og bliver disposed.. Brugen minder dog lidt om hinanden men med andre formål. Som Arne siger er With en rar feature, men pga. Måden C# skrives på savner man den ikke.
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.