PDA

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



aliramazani
یک شنبه 02 مهر 1396, 19:04 عصر
آیا راهی غیر از اینکار وجود داره؟ حس می کنم درست نیست


private int id { get; set; }
public int code { get; set; }
public bool blacklist { get; set; }


public persons(int id, int code,bool blacklis)
{
this.id = id;
this.code = code;
this.blacklist = blacklist;


}


public persons(int id)
{
this.id = id;
}

SajjadKhati
یک شنبه 02 مهر 1396, 20:08 عصر
آیا راهی غیر از اینکار وجود داره؟ حس می کنم درست نیست


private int id { get; set; }
public int code { get; set; }
public bool blacklist { get; set; }


public persons(int id, int code,bool blacklis)
{
this.id = id;
this.code = code;
this.blacklist = blacklist;


}


public persons(int id)
{
this.id = id;
}


سلام
درسته
منتها چون اصل برنامه نویسی اینه که کد یه جا تعریف و در جاهای دیگه فراخونی بشه ، بهتره که از متد سازنده ، اون اورلود متد سازنده ی کامل تر رو فراخونی کنید و بقیه ی مقادیر رو حالا اگه خواستید بدین یا اینکه مقدار پیش فرض بذارید :



private int id { get; set; }
public int code { get; set; }
public bool blacklist { get; set; }




public persons(int id, int code, bool blacklis)
{
this.id = id;
this.code = code;
this.blacklist = blacklist;
}




public persons(int id) : this(id, 0, false)
{
}

mmd2009
دوشنبه 03 مهر 1396, 00:59 صبح
با سلام.

از Optional Parameters هم میتونید استفاده کنید ، بدین صورت :


public class persons
{
private int id { get; set; }
public int code { get; set; }
public bool blacklist { get; set; }

public persons(int id, int code = 0, bool blacklist = false)
{
this.id = id;
this.code = code;
this.blacklist = blacklist;
}
}


و برای فراخوانی نیز بدین گونه عمل کنید :


persons persons = new persons(id: 1);


موفق باشید

aliramazani
دوشنبه 03 مهر 1396, 21:48 عصر
یه سوال دیگه
ببینید اینجا برای blackList که یک متغیر از نوع boolean هستش مقدار false یا true را در نظر گرفتیم.
حالا اگر متغیر ما از نوع byte[] باشه باید برای تهی کردنش چی بنویسیم؟
مثلا پراپرتی اینطور:


private byte[] picture { get; set; }

public persons(int id, int code = 0, bool blacklist = false,byte[]picture?????)
{
this.id = id;
this.code = code;
this.blacklist = blacklist;
}

mmd2009
دوشنبه 03 مهر 1396, 22:21 عصر
ببینید در مثال قبلی ما عمل "تهی" کردن رو برای مقادیر اولیه آرگومان ها استفاده نکردیم بلکه مقادیر default رو به آرگومان های سازنده دادیم. یعنی اگر مثال بالا رو اینطوری هم می نوشتیم مشکلی وجود نداشت :


public persons(int id, int code = default(int), bool blacklis = default(bool))
{
this.id = id;
this.code = code;
this.blacklist = blacklis;
}


ولی برای آرایه ای از بایت ها ( []byte ) اوضاع فرق میکنه ، یعنی شما میتونید بدین دو صورت بنویسید :


byte[] picture = null
or
byte[] picture = default(byte[])


در هر دوحالت مقدار null به picture اختصاص داده می شود.

موفق باشید

mmd2009
چهارشنبه 05 مهر 1396, 22:01 عصر
نکاتی در مورد سی شارپ 7.1 رو یادآور بشم ، اگر با سی شارپ 7.1 کار کنید برای Optional Parameter Default Value به جای :


public persons(int id, int code = default(int), bool blacklis = default(bool))


می توانید بنویسید :


public persons(int id, int code = default, bool blacklis = default)


و همچنین برای Local Variable Defaults میتونید به این صورت عمل کنید :


byte[] picture = default


و موارد بیشتر دیگر که میتونید از مراجع اصلی دنبال کنید.

موفق باشید