Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   .NET-Framework (managed code) (https://www.delphipraxis.net/79-net-framework-managed-code/)
-   -   C# Delphi "with variable do" in C# (https://www.delphipraxis.net/154581-delphi-variable-do-c.html)

generic 16. Sep 2010 10:12

Delphi "with variable do" in C#
 
Delphi-Quellcode:
with objectinstanz do
begin
  Name:='test';
  Id:=1;
end;
Wie ist die Schreibweise für das obere in C# ?

MacGuyver 16. Sep 2010 10:15

AW: Delphi "with variable do" in C#
 
Moin,

ganz klar: Abgewöhnen und bei langen Dingern mit einer kurzen lokalen Variable arbeiten. Damit tust du dir keinen Gefallen.


Stefan
ein WITH-Hasser

Neutral General 16. Sep 2010 10:15

AW: Delphi "with variable do" in C#
 
Soweit ich weiß, gibt es in C# nichts vergleichbares :(

Hat mich auch etwas genervt.

Bernhard Geyer 16. Sep 2010 10:18

AW: Delphi "with variable do" in C#
 
Glücklicherweise gibts das nirgends anders.
Ich weiß nicht wieviel Stunde Fehlersuche diese With-Statements verursacht haben ...

arbu man 16. Sep 2010 10:19

AW: Delphi "with variable do" in C#
 
Soweit ich weiss gibt es das auch in C#
Code:
using (obj) {
  name = "abc";
  ...
}

jfheins 16. Sep 2010 10:24

AW: Delphi "with variable do" in C#
 
Zitat:

Zitat von arbu man (Beitrag 1050045)
Soweit ich weiss gibt es das auch in C#
Code:
using (obj) {
  name = "abc";
  ...
}

Ja schon, entspricht aber nicht exakt dem Delphi with xy do Konstrukt:
Zitat:

Mit der using-Anweisung können Programmierer angeben, wann Objekte, die Ressourcen beanspruchen, freigegeben werden sollen. Das der using-Anweisung bereitgestellte Objekt muss die IDisposable-Schnittstelle implementieren. Diese Schnittstelle stellt die Dispose-Methode bereit, die die Ressourcen des Objekts freigibt.
Das objekt wird automatisch danach freigegeben.

Satty67 16. Sep 2010 11:26

AW: Delphi "with variable do" in C#
 
Mit kurzen lokalen Variablen arbeiten ist sowieso schöner (als with), weil man weiterhin die Member durch die Code-Completion angezeigt bekommt.

himitsu 16. Sep 2010 11:50

AW: Delphi "with variable do" in C#
 
Zitat:

Zitat von Satty67 (Beitrag 1050066)
weil man weiterhin die Member durch die Code-Completion angezeigt bekommt.

Das funktioniert bei with auch ofmals/manchmal. :angel:

Satty67 16. Sep 2010 12:21

AW: Delphi "with variable do" in C#
 
Wie? Ich schaffe es ja nicht zwei Worter am Stück ohne Schreibfehler zu tippen, hätte das gerne...

Delphi-Quellcode:
with Object do
  // und dann? wie komme ich hier an eine Memberliste?

Sherlock 16. Sep 2010 12:33

AW: Delphi "with variable do" in C#
 
Zitat:

Zitat von himitsu (Beitrag 1050069)
Zitat:

Zitat von Satty67 (Beitrag 1050066)
weil man weiterhin die Member durch die Code-Completion angezeigt bekommt.

Das funktioniert bei with auch ofmals/manchmal. :angel:

Das schon, aber beim Debuggen, weiss Delphi dann nicht mehr was das für ein komischer Bezeichner sein soll, den man sich genauer ansehen möchte. Deshalb steht "with" in der Liste böser Dinge ziemlich nahe bei "goto" :D

Sherlock

himitsu 16. Sep 2010 13:28

AW: Delphi "with variable do" in C#
 
Goto ist nicht böse ... man kann es nur genauso böse einsetzen, wie ein True.

Delphi-Quellcode:
if not b then begin
  ...
end;
ist auch nur ein
Delphi-Quellcode:
is b then goto ende;
  ...
ende:
Delphi-Quellcode:
if b = true then Böse;
 

mkinzler 16. Sep 2010 13:39

AW: Delphi "with variable do" in C#
 
Man hat bei goto auch keine Möglichkeit zu ermitteln woher der Sprung kam

HeikoAdams 16. Sep 2010 13:52

AW: Delphi "with variable do" in C#
 
Goto macht eigentlich nur bei Shell-Skripten (*.bat/*.cmd) Sinn, wenn man dort z.B. mit einem Auswahlmenü arbeiten will/muss

implementation 16. Sep 2010 14:17

AW: Delphi "with variable do" in C#
 
Man kann sich dieses with-do-Konstrukt in C# mit Extension Methods und Delegaten zusammenbasteln:
Code:
public static class Extender
{
  public static void WithDo<T>(this T obj, Action<T> act)
  {
    act(obj);
  }
}

// ...
Sehr.Langer.Name.WithDo(v => {
  v.name = "xyz";
  v.alter = 89;
});

Khabarakh 16. Sep 2010 21:42

AW: Delphi "with variable do" in C#
 
Gratulation, du hast die Variablendeklaration neu erfunden :mrgreen: .

@Topic: Für Object Initializers gebe ich with gern auf. Die Prism-Entwickler dachten anscheinend genauso ;) .

Satty67 16. Sep 2010 21:58

AW: Delphi "with variable do" in C#
 
Ist ja aber nicht das gleich wie with, da es nicht mit breits länger erzeugten, sondern nur gerade neu erzeugten Objekten funktioniert (oder?)

alzaimar 16. Sep 2010 22:47

AW: Delphi "with variable do" in C#
 
'with Obj do' ist also böse, ja? Gähn. Der Depp, der das falsch einsetzt ist böse. Nicht das Konstrukt an sich.

Wenn ich mit diesen DevExpress-Komponenten arbeite, die ellenlange Objekthierarchien beinhalten, ist so ein 'With' einfach mal Gold wert. Wenn man weiß, wie man es einsetzt.

Beispiel (Ich würde immer die erste Variante vorziehen):
Delphi-Quellcode:
With TheObject.HasAnAttribute.WhichHasMore.Gosh.Will.ThisEver.End do begin
  SpecialFoo := 1;
  SpecialBar := 2;
End;
// oder
TheObject.HasAnAttribute.WhichHasMore.Gosh.Will.ThisEver.End.SpecialFoo := 1;
TheObject.HasAnAttribute.WhichHasMore.Gosh.Will.ThisEver.End.SpecialBar := 2;
Da das in C# nicht geht, behelfe ich mir -mangels 'WITH'- mit einer privaten Methode ('Clean Code' lässt grüßen)

Code:
private void InitializeSpecialObject (var specialObject : SpecialObject);
{
  specialObject.specialFoo = 1;
  specialObject.specialBar = 2;
}

...
  InitializeSpecialObject (var TheObject.HasAnAttribute.WhichHasMore.Gosh.Will.ThisEver.End);
...
(Geht das mit dem 'Var' in C#?) Egal.

Hmmm. Irgendwie eine Steigerung in Punkto 'Lesbarkeit', oder?

Also: Das WITH war eine nette Idee, bevor es Klassen gab. Mit Klassen und doofen unvorsichtigen Programmierern kamen die Probleme. In der Folge hat man (u.A. bei C#) darauf verzichtet.

Und, hey, eine neue Methode, die auch noch in ihrem Namen beschreibt, was da eigentlich passiert, ist doch eh besser als ein extrem intelligent eingesetztes WITH. Denn da weiss ich immer noch nicht, wieso der Programmierer das WITH nu benutzt oder was er da eigentlich gemacht hat.

Gewöhn Dir also das 'WITH' ab. Nicht weil es böse ist, das kleine 'with', sondern weil es was Besseres gibt.

PS: (Visual)Basic kann das übrigens auch, mit dem WITH. Auch ein Grund, es *nicht* zu verwenden. :stupid:

Satty67 16. Sep 2010 23:01

AW: Delphi "with variable do" in C#
 
Zitat:

Zitat von alzaimar (Beitrag 1050203)
(Geht das mit dem 'Var' in C#?)

Bei einer Object-Referenz (zu 99% bei c#) ja nicht nötig, ansonsten out.

ich nehme lieber kurze lokale Refrenzen
Code:
EndObject theEnd = TheObject.HasAnAttribute.WhichHasMore.Gosh.Will.ThisEver.End;
theEnd.SpecialFoo = 1;
theEnd.SpecialBar = 1;
obwohl der Vorschlag von alzaimar die sprachübergreifende sauberste Lösung ist!

Phoenix 17. Sep 2010 06:18

AW: Delphi "with variable do" in C#
 
Zitat:

Zitat von alzaimar (Beitrag 1050203)
PS: (Visual)Basic kann das übrigens auch, mit dem WITH. Auch ein Grund, es *nicht* zu verwenden. :stupid:

Das B in Basic steht für Beginners, deswegen nehmen Pro's das nicht ;)

Code:
var end = TheObject.HasAnAttribute.WhichHasMore.Gosh.Will.ThisEver.End;
end.SpecialFoo=1;
end.SpecialBar = 2;

alzaimar 17. Sep 2010 06:20

AW: Delphi "with variable do" in C#
 
Was hat eine lokale Variable ohne jeglichen Wert im Code zu suchen? :-D) Aber wir beginnen mit einer Glaubensfrage.

So geht's natürlich auch.

Zitat:

Zitat von Phoenix (Beitrag 1050219)
Das B in Basic steht für Beginners, deswegen nehmen Pro's das nicht ;)

Und 'D' steht für... :stupid:

Stevie 17. Sep 2010 20:28

AW: Delphi "with variable do" in C#
 
Zitat:

Zitat von alzaimar (Beitrag 1050203)
('Clean Code' lässt grüßen)

clean code verbietet auch train wrecks wie das oben von dir gezeigte (ja, ich weiß, die bösen DevExpress Kompos :P)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz