PDA

View Full Version : سوال: مشابه دستور with در Csharp



dr_csharp
شنبه 13 مهر 1387, 17:04 عصر
فکر میکنم تو VB قابلیتی مشابه زیر داشتیم :


With myControl
.Enable = true
.Text = "hello"
.Visible = true
End With


تو Csharp آیا همچین امکانی داریم ؟

علیرضا مداح
شنبه 13 مهر 1387, 17:48 عصر
سلام دوست عزیز،
در C# 3.0 یک ویژگی به نام Object Initializer (http://msdn.microsoft.com/en-us/library/bb384062.aspx)معرفی شده است که هنگام ایجاد آبجکت ، به شما اجازاه ی ست کردن پروپرتی های آن آبجکت را بدون نیاز به فراخوانی Constructor آن و ذکر مجدد نام آبجکت میدهد :


private void Form1_Load(object sender, EventArgs e)
{
Button myButton = new Button()
{
Name = "MyButton",
Size = new Size(10, 10),
Text = "Click Me"
};
this.Controls.Add(myButton);
}


اما این ویژگی دقیقا" به همان صورت که در VB.Net با آن کار میکنید در C# وجود ندارد ،/

__H2__
دوشنبه 15 مهر 1387, 02:15 صبح
سلام
ویژگی With در VB یک متغیر ساده و لحظه ای است که بیشتر ارزش سرعت در runtime را دارد و اینکه برنامه مجبور نشود چند Property و اشاره گر تو در تو را هر بار محاسبه و call کند وگرنه به آن صورت که کاربر dr_csharp از myControl استفاده کردند چندان ارزشی ندارد و شاید فقط کمی کد را کوتاه کند...
یعنی دو کد زیر برابر هستند ...


'VB
With AAA.BBB.CCC.DDD
.X = 25
.Y = ""
.Z = 110
End With


//C#
TypeName temp = AAA.BBB.CCC.DDD;
temp.X = 25;
temp.Y = "";
temp.Z = 110;

مهم این است که بدانیم چه زمانی میتوانیم با تعریف متغییر محلی و یا With بار پردازشهای تکراری را از دوش کدمان کم کنیم و گرنه یک کم اختلافات تایپی چندان مهم نیست.

=====

البته اون ویژگی جدید و جالب 2008 هم که آقای علیرضا مداح گفتند هم که جای خود دارد
و دو کد زیر هم برابر هستند ...


'VB
Dim x As New TypeName() With{.X=25, Y=""}

//C#.Net
TypeName x = new TypeName(){.X=25, Y=""};