مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

alirezaavini0011

عضویت از 1395/10/13

مفهوم get , set

  • سه شنبه 10 مهر 1397
  • 14:23
تشکر میکنم

سلام 

چند تا سورسو داشتم نگاه میکردم با get , set خالی مواجه شدم 

با پراپرتی ها کار کردم اما پراپرتی خالیو نمیتونم درک کنم

به این کد نگاه کنید:

public int Id { get; set; }

کامپایلار با این پراپرتی چیکار میکنه؟ در صورتی که داخل کلاسی که این پراپرتی نوشته شده فیلدی وجود نداره

پاسخ های این پرسش

تعداد پاسخ ها : 2 پاسخ
کاربر سایت

salman_b

عضویت از 1396/02/18

  • سه شنبه 10 مهر 1397
  • 14:49

سلام

در برنامه نویسی public کردن متغیرهای کلاس کار اشتباهی هستش

مثلا مثال زیر اشتباه است:

    public class Person
    {
        public string name;
    }

خب، حالا چرا اشتباهه ؟

چون کاربر میتونه به این متغیر هر مقدار دلخواهی با هر بازه ای بده! در صورتی که شما همیشه میخواین روی فیلدهای خود کنترل داشته باشید. مثلا نمیخواین مقدار نام بیشتر از 30 کاراکتر باشد.

خب پس چیکار میکنیم ؟

    public class Person
    {
        private string name;

        public void SetName(string value)
        {
            if(value.Length <= 30)
            {
                name = value;
            }
        }

        public string GetName()
        {
            return name;
        }
    }

حالا در سی شارپ مفهمومی به نام property بوجود اومده که این کار رو مختصر میکنه و اون رو به عنوان یک متا در اسمبلی قرار میده تا برای کامپایلر قابل دسترس باشه تا بشه با attribute ها اون رو کنترل کرد:

    public class Person
    {
        [MaxLength(30)]
        public string Name { get; set; }
    }

خب حالا که موضوع جا افتاد property خالی معادل زیر است:

    public class Person
    {
        private string name;

        public void SetName(string value)
        {
            name = value;
        }

        public string GetName()
        {
            return name;
        }
    }

خب حالا یه همچین چیزی چه فرقی داره با اینکه مستقیم خود فیلد رو public کنیم ؟

دو دلیل داره:

اول اینکه اینطوری ممکنه بعدا بخواین این فیلد رو کنترل کنید که دیگه به راحتی و بدون تغییر در بخش های دیگه این کار رو انجام میدین، پس این یه استاندارد برنامه نویسی هستش

دوم اینکه سی شارپ با استفاده از reflection در زمان اجرا قادر به دستیابی به property ها هستش و عملا کار پر کردن یک مدل یا ارسال یه مدل پر شده به دیتابیس، برنامه های گزارش گیری و ... به راحتی و بدون کانفیگ خاصی در سمت برنامه انجام میشه.

موفق باشید.

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • سه شنبه 10 مهر 1397
  • 15:07

 زمانی که لازم نیست منطقی دورن accessor ها نوشته شود از Automatic Property استفاده می کنیم. در نسخه های قدیمی #C نیاز بود که مقدار مورد نظر رو دورن یک fild نگه دارید و آن را تنظیم یا بازگردانی کنید، در نسخه های جدید دیگه لازم به انجام این کار نیست و کامپایلر به صورت خودکار این کار را برای شما انجام می دهد.

اطلاعات بیشتر: ( ^ ، ^ )

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)