PDA

View Full Version : آیا از لحاظ برنامه نویسی میتوان تعداد زیادی متغیر درون سازنده کلاس تعریف کرد؟



alexmcse
یک شنبه 03 اسفند 1393, 23:45 عصر
سلام

class Example {
public Example(int _P1, int _P2, int _P3, int _P4, int _P5, int _P6, int _P7, int _P8, int _P9, int _P10, int _P11, int _P12, int _P13, int _P14, int _P15, int _P16, int _P17, int _P18, int _P19, int _P20, int _P21, int _P22, int _P23, int _P24, int _P25, int _P26, int _P27, int _P28, int _P29, int _P30, int _P31, int _P32, int _P33, int _P34, int _P35, int _P36, int _P37, int _P38, int _P39, int _P40, int _P41, int _P42, int _P43, int _P44, int _P45, int _P46, int _P47, int _P48, int _P49, int _P50, int _P51, int _P52, int _P53, int _P54, int _P55, int _P56, int _P57, int _P58, int _P59, int _P60, int _P61, int _P62, int _P63, int _P64, int _P65, int _P66, int _P67, int _P68, int _P69, int _P70, int _P71, int _P72, int _P73, int _P74, int _P75, int _P76, int _P77, int _P78, int _P79, int _P80, int _P81, int _P82, int _P83, int _P84, int _P85, int _P86, int _P87, int _P88, int _P89, int _P90, int _P91, int _P92, int _P93, int _P94, int _P95, int _P96, int _P97, int _P98, int _P99, int _P100)
{

//آیا از لحاظ برنامه نویسی میتوان تعداد زیادی متغییر درون سازنده کلاس مثلا 100
//یا بیشتر تعرف کرد (این روش در برنامه نویسی روش صحیحی است؟ )

//آیا میشود آن رابه چند سازنده با مقدار کوچکتر تقسیم کرد ؟

}
}
تشکر

plus
دوشنبه 04 اسفند 1393, 02:06 صبح
میشه ولی به هیچ وجه صحیح نیست. اگه آرگومان ها از یک نوع هستن و نظر مفهومی به هم مرتبطن میتونید از آرایه (Array) استفاده کنید و گرنه میتونید اونهایی که به هم مرتبط هست رو در struct یا class متفاوتی تعریف و آرگومانی از نوع اون class یا struct تعریف کنید. اگه دنبال تعداد میگردین به طور متوسط بیش از 7 آرگومان منقطی نیست. سازنده ها رو هم نمیشه تقسیم کرد.

SabaSabouhi
دوشنبه 04 اسفند 1393, 09:04 صبح
میشه ولی به هیچ وجه صحیح نیست. اگه آرگومان ها از یک نوع هستن و نظر مفهومی به هم مرتبطن میتونید از آرایه (Array) استفاده کنید و گرنه میتونید اونهایی که به هم مرتبط هست رو در struct یا class متفاوتی تعریف و آرگومانی از نوع اون class یا struct تعریف کنید. اگه دنبال تعداد میگردین به طور متوسط بیش از 7 آرگومان منقطی نیست. سازنده ها رو هم نمیشه تقسیم کرد.

سلام
ضمن تایید فرمایشات دوستم plus اضافه کنم که در صورت نیاز به آرگومان‌های پر تعداد و احتمالاً optional می‌تونی از ساختار زیر استفاده کنی

public void MyMethod( params object[] parameters ){
}

هنگام فراخوانی می‌تونی با تعداد متفاوت بهش پارامتر بدی ( حتا صفر تا )

صبا صبوحی

alexmcse
دوشنبه 04 اسفند 1393, 11:04 صبح
میشه ولی به هیچ وجه صحیح نیست. اگه آرگومان ها از یک نوع هستن و نظر مفهومی به هم مرتبطن میتونید از آرایه (Array) استفاده کنید و گرنه میتونید اونهایی که به هم مرتبط هست رو در struct یا class متفاوتی تعریف و آرگومانی از نوع اون class یا struct تعریف کنید. اگه دنبال تعداد میگردین به طور متوسط بیش از 7 آرگومان منقطی نیست. سازنده ها رو هم نمیشه تقسیم کرد.

اگر زحمت نیست یک مثال بزنید
تشکر

plus
دوشنبه 04 اسفند 1393, 18:12 عصر
شما توضیح بدین برای چی این تداد آرگومان لازم دارین، و از چه نوعی هستن تا مثال بزنم.

alexmcse
دوشنبه 04 اسفند 1393, 21:23 عصر
شما توضیح بدین برای چی این تداد آرگومان لازم دارین، و از چه نوعی هستن تا مثال بزنم.

برای ساختن پروپرتی های یوزر کنترل به صورت درختی (تو در تو)
تعداد پروپرتی ها زیاد است چند تا بولین چند تا کالر وچند تا اینت است وچند تا ....

plus
دوشنبه 04 اسفند 1393, 22:14 عصر
شما برای کلاس هایی که قراره در محیط Designer استفاده میشن بهتره کلاسه هایی با سازنده های بدون پارامتر تعریف کنید و بجای مقداردهی Property ها از طریق سازنده، مقادیر پیشفرض برای اونها بگذارین. این روشی هست که در دات نت توسط کنترل های داخلی هم استفاده میشه. برای مثال فرض کنید ما یک UserControl با یک Property از نوع Color داریم:

class UserControl1 : UserControl {
private Color someColor = SystemColors.Window;
public UserControl1() {
}
[DefaultValue("Window")]
public Color SomeColor {
get {
return this.someColor;
}
set {
this.someColor = value;
}
}
}

همونطور که میبینید بجای دریافت Property از طریق سازنده، یک مقدار پیشفرض گرفته شده. استفاده از DefaultAttribute برای Property به Designer مقدار پیشفرض رو به Designer اعلام کرده. این مقدار باید همون مقداری باشه که به صورت پیشفرض موقع اجرای کنترل قرار مگیره (مقدار SystemColors.Window). بابراین وقتی شی در Designer ایجاد میشه مقدار SomeColor برابر Window هست و در پنجره Properties هم با فونت Normal نمایش داده شده یعنی مقدار پیشفرض برای این Property استفاده میشه و در فایل designer.cs چیزی برای مقدار دهی این مشخه اضافه نمیشه. گذاشتن DefaultValue برای مشخه هایی از کنترل که به صورت public تعریف میشن در حالت پیشفرض ضروریه. (توضیحش کمی مفصله)
برای مشخه های تو در تو هم به همین ترتیب هست. قرار نیست در سازنده یک کلاس مقادیر تک تک مشخصه های همه Property ها و زیر مجموعه های اونها گرفته بشه. یک شی پیشفرض برای اون Property تعریف کنید.
البته پیاده سازی صحیح در این حالت با Designer کمی دردسر ایجاد میکنه چون نمیتونید از DefaultValueAttribute برای اعلام مقدار پیشفرض برای مشخه های تو در تو استفاده کنید. در مورد DesignerSerializationVisibility جستجو کنید.