![]() |
Re: [C#] Fragen zu automatisch generiertem Code
Zitat:
Code:
public class Form1 : System.Windows.Forms.Form
{ Zitat:
|
Re: [C#] Fragen zu automatisch generiertem Code
Zitat:
Dispose ist generell die einzige Methode der IDisposable-Schnittstelle. Sie dient dazu, dem Benutzer die Möglichkeit der deterministischen Zerstörung von Objekten zu geben, die .net ansonsten nicht anbietet. Sie wird meist verwendet, um nicht gemanagete Ressourcen freizugeben. Im .net SDK zu finden unter "Cleaning Up Unmanaged Resources". In diesem besonderen Fall handelt es sich aber um eine Methode, die bereits in Component definiert wird. Wie im Code zu sehen, ruft sie auch die Dispose-Methoden aller Unterkomponenten auf. Mehr dazu unter Component.Dispose im .net SDK. Zitat:
Zitat:
Zitat:
Noch etwas generelles: In C# gibt es nichts "under the hood", also Code, der automatisch vom Compiler erzeugt wird wie in Delphi. Der gesamte Verwaltungscode ist mit drin. Deshalb wurden für C# 2.0 auch partial classes eingeführt, die man also innerhalb mehrerer Dateien definieren kann. Die Designer legen hierzu eine eigene Datei für den gesamten generierten Code an. [Nachtrag] Zitat:
|
Re: [C#] Fragen zu automatisch generiertem Code
Zitat:
[edit=fkerber]Neu gespeichert wg. Code-Highlighting. Mfg, fkerber[/edit] |
Re: [C#] Fragen zu automatisch generiertem Code
Code:
Da fehlt ja wohl 'ne Klammer auf. Ich garantiere dir, dass dieser Code nicht kompiliert. Namespaces können keine Funktionen beinhalten.
namespace Project1
{ const String APPNAME = "Hello"; const String VER = "1.0"; const String INFO_TEXT = APPNAME + " " + VER+"\nCopyright (c) 2004 Michael Puff\n\nhttp://www.luckie-online.de"; ... private void btnAbout_Click(object sender, System.EventArgs e) { MessageBox.Show(INFO_TEXT, APPNAME, MessageBoxButtons.OK, MessageBoxIcon.Information); } } } Nachtrag: Noch ein Tipp - der C# Builder bringt doch ein kurzer C#-Tutorial mit. Darin wird eigentlich alles geklärt ;c) |
Re: [C#] Fragen zu automatisch generiertem Code
OK, hier der gesamte Code:
Code:
Wie man sieht gehört die letzte schließende Klammer zu ersten öffnenden Klammer. Und somit liegen die Methoden von WinForm eindeutig im Namespace von Project1.
namespace Project1
{ /// <summary> /// Summary description for WinForm. /// </summary> public class WinForm : System.Windows.Forms.Form { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.Container components = null; private System.Windows.Forms.Button btnClose; private System.Windows.Forms.Button btnAbout; private System.Windows.Forms.Label lblBanner; public WinForm() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose (bool disposing) { if (disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.btnClose = new System.Windows.Forms.Button(); this.lblBanner = new System.Windows.Forms.Label(); this.btnAbout = new System.Windows.Forms.Button(); this.SuspendLayout(); // // btnClose // this.btnClose.Location = new System.Drawing.Point(208, 144); this.btnClose.Name = "btnClose"; this.btnClose.TabIndex = 0; this.btnClose.Text = "&Schließen"; this.btnClose.Click += new System.EventHandler(this.btnClose_Click); // // lblBanner // this.lblBanner.BackColor = System.Drawing.Color.White; this.lblBanner.Font = new System.Drawing.Font("Microsoft Sans Serif", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.lblBanner.Location = new System.Drawing.Point(0, 0); this.lblBanner.Name = "lblBanner"; this.lblBanner.Size = new System.Drawing.Size(296, 72); this.lblBanner.TabIndex = 2; this.lblBanner.Text = "lblBanner"; this.lblBanner.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // btnAbout // this.btnAbout.Location = new System.Drawing.Point(232, 8); this.btnAbout.Name = "btnAbout"; this.btnAbout.Size = new System.Drawing.Size(48, 23); this.btnAbout.TabIndex = 3; this.btnAbout.Text = "&Info"; this.btnAbout.Click += new System.EventHandler(this.btnAbout_Click); // // WinForm // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 175); this.Controls.Add(this.btnAbout); this.Controls.Add(this.lblBanner); this.Controls.Add(this.btnClose); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.Name = "WinForm"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Foo"; this.Load += new System.EventHandler(this.WinForm_Load); this.ResumeLayout(false); } #endregion const String APPNAME = "Hello"; const String VER = "1.0"; const String INFO_TEXT = APPNAME + " " + VER+"\nCopyright (c) 2004 Michael Puff\n\nhttp://www.luckie-online.de"; /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new WinForm()); } private void btnClose_Click(object sender, System.EventArgs e) { Application.Exit(); } private void WinForm_Load(object sender, System.EventArgs e) { this.Text = APPNAME; lblBanner.Text = APPNAME; } private void btnAbout_Click(object sender, System.EventArgs e) { MessageBox.Show(INFO_TEXT, APPNAME, MessageBoxButtons.OK, MessageBoxIcon.Information); } } } [edit=fkerber]Neu gespeichert wg. Code-Highlighting. Mfg, fkerber[/edit] |
Re: [C#] Fragen zu automatisch generiertem Code
Da liegt alles im Namespace Project1. Aber viel wichtiger ist, dass alles innerhalb der Klassendeklaration passiert.
|
Re: [C#] Fragen zu automatisch generiertem Code
Ich sag's mal so:
Natürlich ist alles im Namespace. In .net kann nichts außerhalb des Namespace existieren. Aber DIREKT im Namespace können nur Typen definiert werden (class, enum, struct). Nur strukturierte Typen können auch Methoden enthalten. Das gilt für ALLE, selbst für aus Windows-DLLs importierte Funktionen. Es gibt keine Funktionen in .net, nur Methoden. Objektorientiert halt. |
Re: [C#] Fragen zu automatisch generiertem Code
@Luckie: Wieso denn? Nur die Klasse Winform liegt innerhalb des Namespaces. Die Methoden liegen alle innerhalb der Klasse
Code:
namespace Project1
{ /// <summary> /// Summary description for WinForm. /// </summary> public class WinForm : System.Windows.Forms.Form { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.Container components = null; private System.Windows.Forms.Button btnClose; private System.Windows.Forms.Button btnAbout; private System.Windows.Forms.Label lblBanner; private void btnAbout_Click(object sender, System.EventArgs e) { MessageBox.Show(INFO_TEXT, APPNAME, MessageBoxButtons.OK, MessageBoxIcon.Information); } } } |
Re: [C#] Fragen zu automatisch generiertem Code
Der Punkt ist, die Methoden befinden sich in der Klasse, die sich wiederum im Namespace befindet. Somit befindet sich INDIREKT die Methode auch im Namespace. DIREKT im Namespace liegt hingegen nur die Klasse.
Nachtrag: Ich sehe jetzt erst das "@Luckie", sorry ;c) |
Re: [C#] Fragen zu automatisch generiertem Code
@OG: Ja so wird ein Schuh draus, also mit dem DIREKT und INDIREKT. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:00 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