گفتگو هایی در باب سی شارپ

Salar1359

New Member
ممنون بابت وقتی که گذاشتید نمی دونم چطوری تشکر کنم اگه sql توی سیستم نصب نباشه چه ورژنی از sql نصب کنیم مثلا sqlexpress یا چیز دیگه ای

ممنون بابت وقتی که گذاشتید نمی دونم چطوری تشکر کنم اگه sql توی سیستم نصب نباشه چه ورژنی از sql نصب کنیم مثلا sqlexpress یا چیز دیگه ای

یا همون ادرسی که گفتید برم servicse.msc اگه فعال نبود فعالش کنم
 
آخرین ویرایش توسط مدیر:

the_king

مدیرکل انجمن
ممنون بابت وقتی که گذاشتید نمی دونم چطوری تشکر کنم اگه sql توی سیستم نصب نباشه چه ورژنی از sql نصب کنیم مثلا sqlexpress یا چیز دیگه ای



یا همون ادرسی که گفتید برم servicse.msc اگه فعال نبود فعالش کنم
اگه خودتون SQL Server رو جداگانه نصب نکرده باشید تا حالا با Sql Server Express کار می کردید که همراه ویژوال استدیو نصب شده. باید همونم نصب کنید.
 

Salar1359

New Member
میشه از اینترنت sql server experss دانلود کرد . من خیلی به شما زحمت دادم بابت جوابهاتون خیلی ممنونم راستش خیلی نا امید شده بودم چند ماه هیچی ننوشتم فقط بخاطر همین مشکل ممنونم بابت همه چی
 

the_king

مدیرکل انجمن
میشه از اینترنت sql server experss دانلود کرد . من خیلی به شما زحمت دادم بابت جوابهاتون خیلی ممنونم راستش خیلی نا امید شده بودم چند ماه هیچی ننوشتم فقط بخاطر همین مشکل ممنونم بابت همه چی
بله رایگان از سایت مایکروسافت می توانید دانلودش کنید، ولی اول بدونید کدوم نسخه رو استفاده می کردید که بدونید کدوم نسخه رو باید دانلود کنید. نسخه های زیادی داره. اگه نسخه قدیمی تری استفاده کنید پایگاه داده تون رو بازش نمی کنه و اگه نسخه جدیدتری رو استفاده کنید با اولین دسترسی پایگاه داده نسخه اش ارتقاء پیدا می کنه و بعد دیگه نسخه قبلی نمیتونه بازش کنه.
 

Salar1359

New Member
میشه از اینترنت sql server experss دانلود کرد . من خیلی به شما زحمت دادم بابت جوابهاتون خیلی ممنونم راستش خیلی نا امید شده بودم چند م
بله رایگان از سایت مایکروسافت می توانید دانلودش کنید، ولی اول بدونید کدوم نسخه رو استفاده می کردید که بدونید کدوم نسخه رو باید دانلود کنید. نسخه های زیادی داره. اگه نسخه قدیمی تری استفاده کنید پایگاه داده تون رو بازش نمی کنه و اگه نسخه جدیدتری رو استفاده کنید با اولین دسترسی پایگاه داده نسخه اش ارتقاء پیدا می کنه و بعد دیگه نسخه قبلی نمیتونه بازش کنه.
 

Salar1359

New Member
ببخشید من ویژوال استدیو 2010 دارم اما sql 2008 فقط تو اینترنت پیدا کردم و2012و2016و2017که نزدیک ترینش فکر کنم 2008 باشه
 

Salar1359

New Member
من با وئژوال استدیو 2010 کار میکنم نمیدونم با کدوم sql service experess بهش میخوره اخه 2008 و 2012 تو اینترنت هست اما 2010 نیست
 

the_king

مدیرکل انجمن
ببخشید من ویژوال استدیو 2010 دارم اما sql 2008 فقط تو اینترنت پیدا کردم و2012و2016و2017که نزدیک ترینش فکر کنم 2008 باشه
ویژوال استدیو 2010 همراهش SQL Server Express 2008 رو داره. بهتره فایل SQLEXPR_x86_ENU.exe رو دانلود کنید که هم روی ویندوز های 32 بیتی نصب پذیر ئه و هم 64 بیتی :
Microsoft SQL Server 2008 SP2 Express Edition Service Pack 2
لینک مستقیم دانلود :
SQLEXPR_x86_ENU.exe
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد
استاد علی ، چرا توی کلاس ControlCollection ، با اونکه اینترفیس IList رو پیاده سازی میکنه و این اینترفیس ، ایندکسری تحت عنوان زیر داره :

کد:
object this[int index] { get; set; }
ولی در کلاس ControlCollection ، اصلا چنین ایندکسری رو تعریف نکرد . چرا؟ اگه بگین ایندکسر
کد:
public virtual Control this[int index] { get; }
رو تعریف کرد ، این که نباید پیاده سازی شده ی اینترفیس IList باشه چون نه اَکسِسور set نداره و نه نوع خروجی اش با اون یکی هه و هم virtual هم داره
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
استاد علی ، در کد زیر :

کد:
        public Tiba this[ref int indexer]
        {
            get
            {
                return this.TibaArray[indexer];
            }
            set
            {
                this.TibaArray[indexer] = value;
            }
        }

چرا ارور :
ref and out are not valid in this context
رو میده؟ تا جایی که یادم میاد ، قبلا میتونستم ایندکسرها رو بصورت out و ref تعریف کنم !
 

the_king

مدیرکل انجمن
سلامی مجدد
استاد علی ، چرا توی کلاس ControlCollection ، با اونکه اینترفیس IList رو پیاده سازی میکنه و این اینترفیس ، ایندکسری تحت عنوان زیر داره :

کد:
object this[int index] { get; set; }
ولی در کلاس ControlCollection ، اصلا چنین ایندکسری رو تعریف نکرد . چرا؟ اگه بگین ایندکسر
کد:
public virtual Control this[int index] { get; }
رو تعریف کرد ، این که نباید پیاده سازی شده ی اینترفیس IList باشه چون نه اَکسِسور set نداره و نه نوع خروجی اش با اون یکی هه و هم virtual هم داره
خیال تون رو اول راحت کنم، حتما پیاده سازی شده، چه implicit و چه explicit و چه پنهان و چه آشکار به هر حال اون IList.this باید پیاده سازی بشه و شده، بدون تردید.
اون IList.this که در این پیاده سازی get که نمی گنجه و پیاده سازی اش هم اجباری ئه. از طرف دیگه نمیشه دو تا متد، پروپرتی یا اپراتور با یک قالب پارامتری مشابه تعریف بشوند، یعنی نمیشه هم این this[int index] جدید باشه و هم IList.this بصورت implicit باشه. جور در نمیاد. حتی اگه پارامتر هر دو int باشه ولی نوع داده یکی شون Control باشه و دیگری string باز هم نمیشه. باید حتما تعداد پارامتر ها یا نوع داده پارامتر ها فرق کنه تا بشه this دیگه ای اضافه کرد. یادتون باشه قبلا مورد داشتیم که وقتی قراره یک تعریف قبلی کنار گذاشته بشه و تعریف جدیدی جاشو بگیره با کلمه کلیدی new تعریف جدید نوشته میشد. فرضا قبلی get و set داشت، در تعریف جدید می خواهیم فقط get باشه. همچنین تعریفی باید new داشته باشه تا قبلی کنار گذارده بشه. و همانطور که قبلا هم اشاره کردم هر چیزی که Object Browser یا حتی Red Gate Reflector نشون میده الزاما کامل نیست. در این مثالی هم که زدید در حقیقت همچین کدی هست که با new نوشته شده :
کد:
    public new virtual Control this[int index]
    {
        get
        {
.
.
.
        }
    }
من دقیقا دارم بر اساس کدی که ILSpy نشون میده اینو میگم، حدس یا گمان من نیست :
new this.png

در واقع پیاده سازی IList.this هم جداگانه هست و explicit پیاده سازی شده ولی در کد نمایش داده نشده. حالا معیارهای نمایش و عدم نمایش چیه، نمیدونم.

استاد علی ، در کد زیر :

کد:
        public Tiba this[ref int indexer]
        {
            get
            {
                return this.TibaArray[indexer];
            }
            set
            {
                this.TibaArray[indexer] = value;
            }
        }

چرا ارور :
ref and out are not valid in this context
رو میده؟ تا جایی که یادم میاد ، قبلا میتونستم ایندکسرها رو بصورت out و ref تعریف کنم !
یادم میاد همچی موردی رو مطرح کردید ولی قاعدتا قبلا داشتید با متد های get_Item و set_Item کار می کردید که indexer هستند ولی برای سازگاری با COM و استفاده در سایر زبانها.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیال تون رو اول راحت کنم، حتما پیاده سازی شده، چه implicit و چه explicit و چه پنهان و چه آشکار به هر حال اون IList.this باید پیاده سازی بشه و شده، بدون تردید.
اون IList.this که در این پیاده سازی get که نمی گنجه و پیاده سازی اش هم اجباری ئه. از طرف دیگه نمیشه دو تا متد، پروپرتی یا اپراتور با یک قالب پارامتری مشابه تعریف بشوند، یعنی نمیشه هم این this[int index] جدید باشه و هم IList.this بصورت implicit باشه. جور در نمیاد. حتی اگه پارامتر هر دو int باشه ولی نوع داده یکی شون Control باشه و دیگری string باز هم نمیشه. باید حتما تعداد پارامتر ها یا نوع داده پارامتر ها فرق کنه تا بشه this دیگه ای اضافه کرد. یادتون باشه قبلا مورد داشتیم که وقتی قراره یک تعریف قبلی کنار گذاشته بشه و تعریف جدیدی جاشو بگیره با کلمه کلیدی new تعریف جدید نوشته میشد. فرضا قبلی get و set داشت، در تعریف جدید می خواهیم فقط get باشه. همچنین تعریفی باید new داشته باشه تا قبلی کنار گذارده بشه. و همانطور که قبلا هم اشاره کردم هر چیزی که Object Browser یا حتی Red Gate Reflector نشون میده الزاما کامل نیست. در این مثالی هم که زدید در حقیقت همچین کدی هست که با new نوشته شده :
کد:
    public new virtual Control this[int index]
    {
        get
        {
.
.
.
        }
    }
من دقیقا دارم بر اساس کدی که ILSpy نشون میده اینو میگم، حدس یا گمان من نیست :
new this.png

در واقع پیاده سازی IList.this هم جداگانه هست و explicit پیاده سازی شده ولی در کد نمایش داده نشده. حالا معیارهای نمایش و عدم نمایش چیه، نمیدونم.

سلام استاد علی
پس چرا در عکس زیر میگه که مقدار بازگشتی ایندکسر درون اینترفیس IList.this[int] رو درست انجام ندادم :


1.jpg
ولی در کلاس ControlCollection ، خود مایکروسافت ، همین کار رو کرد؟! چرا؟

یادم میاد همچی موردی رو مطرح کردید ولی قاعدتا قبلا داشتید با متد های get_Item و set_Item کار می کردید که indexer هستند ولی برای سازگاری با COM و استفاده در سایر زبانها.

ممنون
تا صفحه ی 14 ، نبود . بقیه شم جستجو کردم ولی پیدا نکردم . میشه یه اشاره ی کوچیکی به جواب کنین؟
 

the_king

مدیرکل انجمن
سلام استاد علی
پس چرا در عکس زیر میگه که مقدار بازگشتی ایندکسر درون اینترفیس IList.this[int] رو درست انجام ندادم :
چون این new virtual Control this هیچگونه ربطی به IList.this نداره، خطا میده که چرا IList.this رو پیاده سازی نکردید. شما توی کدتون باید IList.this رو جداگانه پیاده سازی کنید، بصورت explicit.

مشاهده پیوست 111993
ولی در کلاس ControlCollection ، خود مایکروسافت ، همین کار رو کرد؟! چرا؟
همین کار رو نکرده. هر کدی که میبینید نه الزاما دقیقا همونه که بوده و نه الزاما کامله و نه الزاما قابل کامپایله.

ممنون
تا صفحه ی 14 ، نبود . بقیه شم جستجو کردم ولی پیدا نکردم . میشه یه اشاره ی کوچیکی به جواب کنین؟
چیز خاصی نگفتید که من جواب بدم، فقط پرسیدید دوم اینکه چرا میشه توی ایندکسرها ، نوع اندیس رو ref و out تعریف کرد؟ که منم جواب دادم که به اینترفیس خاصی متصل نیست که فرمتش خاص باشه. دیگه نه کدی نشون دادید و نه من ازتون پرسیدم که در مورد چه کدی صحبت می کنید. اون Indexer خاص #C ئه، چیزی جز یک یا دو متد نیست، عملا بصورت دو تا متد _get و _set پیاده سازی میشه، فرضا void set_Item(int index, float value) و float get_Item(int index) که یکی شون معادل get ئه و یکی شون معادل set
کد:
        public class Test
        {
            public float this[int index]
            {
                get
                {
                    return 0f;
                }
                set
                {
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            var methods = typeof(Test).GetMethods(BindingFlags.Instance | BindingFlags.Public);
            var s = new StringBuilder();
            foreach (var method in methods)
            {
                s.AppendLine(method.Name);
            }
            MessageBox.Show(s.ToString());
        }
که دست تون هم در انتخاب پارامترش باز ئه، میتونه ref و out داشته باشه. در COM فرضا ActiveX ممکنه یک []Row داشته باشه که حالت Indexer ای داره. اونم عملا get_Row و set_Row ئه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
چون این new virtual Control this هیچگونه ربطی به IList.this نداره، خطا میده که چرا IList.this رو پیاده سازی نکردید. شما توی کدتون باید IList.this رو جداگانه پیاده سازی کنید، بصورت explicit.


همین کار رو نکرده. هر کدی که میبینید نه الزاما دقیقا همونه که بوده و نه الزاما کامله و نه الزاما قابل کامپایله.

سلام
ممنون استاد علی
من آخر متوجه نشدم . الان بصورت explicitly هم پیاده سازی کردم ولی ارور زیر رو میده :


2.JPG

میشه بگین چجوری باید کد رو درست کنم؟ یعنی مثل کلاسی که مایکروسافت در ControlCollection برای ایندکسرها انجام داد ، بشه؟



چیز خاصی نگفتید که من جواب بدم، فقط پرسیدید دوم اینکه چرا میشه توی ایندکسرها ، نوع اندیس رو ref و out تعریف کرد؟ که منم جواب دادم که به اینترفیس خاصی متصل نیست که فرمتش خاص باشه. دیگه نه کدی نشون دادید و نه من ازتون پرسیدم که در مورد چه کدی صحبت می کنید. اون Indexer خاص #C ئه، چیزی جز یک یا دو متد نیست، عملا بصورت دو تا متد _get و _set پیاده سازی میشه، فرضا void set_Item(int index, float value) و float get_Item(int index) که یکی شون معادل get ئه و یکی شون معادل set
کد:
        public class Test
        {
            public float this[int index]
            {
                get
                {
                    return 0f;
                }
                set
                {
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            var methods = typeof(Test).GetMethods(BindingFlags.Instance | BindingFlags.Public);
            var s = new StringBuilder();
            foreach (var method in methods)
            {
                s.AppendLine(method.Name);
            }
            MessageBox.Show(s.ToString());
        }
که دست تون هم در انتخاب پارامترش باز ئه، میتونه ref و out داشته باشه. در COM فرضا ActiveX ممکنه یک []Row داشته باشه که حالت Indexer ای داره. اونم عملا get_Row و set_Row ئه.

نه
اینجا سئوالم چیز دیگه ای هست . اینکه بی زحمت یه کدی مثال بزنین که در اندیس یک ایندکسر ، out یا ref را بشه تعریف کرد
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
استاد علی ، دلیل اش اینه که کلاس ControlCollection ، از کلاس ArrangedElementCollection ارث بری میکنه و این کلاس ، عضو ایندکسر در اینترفیس IList رو پیاده سازی کرد . پس دیگه نیازی به پیاده سازی در کلاس فرزندش یعنی ControlCollection نداره .

1.JPG

در کلاس ControlCollection ، اون ایندکسر
کد:
public new virtual Control this[int index]
که hide میکرد ایندکسر
کد:
internal virtual IArrangedElement this[int index]
در کلاس ArrangedElementCollection و ایندکسر
کد:
public virtual Control this[string key]
هم که اورلودی بود برای ایندکسر دیگه در همون کلاس ControlCollection (همون ایندکسری که در خط بالا گفته شد)
ممنون
 

the_king

مدیرکل انجمن
سلام
ممنون استاد علی
من آخر متوجه نشدم . الان بصورت explicitly هم پیاده سازی کردم ولی ارور زیر رو میده :


مشاهده پیوست 111996

میشه بگین چجوری باید کد رو درست کنم؟ یعنی مثل کلاسی که مایکروسافت در ControlCollection برای ایندکسرها انجام داد ، بشه؟
چرا دارین ترکیب شون می کنین؟ IList.this رو که نباید ترکیب کنین با new virtual ای که خودتون دارید تعریف می کنید، IList.this رو جداگانه باید پیاده سازی کنین.
کد:
    class Test2 : ArrayList, IList
    {

        object IList.this[int index]
        {
            get
            {
                return null;
            }
            set
            {
            }
        }

        public new virtual Control this[int index]
        {
            get
            {
                return null;
            }
        }
    }
}
نه
اینجا سئوالم چیز دیگه ای هست . اینکه بی زحمت یه کدی مثال بزنین که در اندیس یک ایندکسر ، out یا ref را بشه تعریف کرد
تعریف که میشه، شما نمی توانید پیاده سازیش کنید، برای ارتباط با سایر زبان ها است، اینجا رو در سایت مایکروسافت ببینید :
Bookmarks.Item property
کد:
Bookmark this[
    ref Object Index
] { get; }
Bookmark this.png

Bookmarks this.png

اون indexer عملا متد های get و set ئه، indexer یک موجودیت جدا نیست که بگیم پروپرتی داریم و متد و indexer. در #C اینطوری میشه پیاده سازیش کرد :
کد:
        public object get_Item(ref int index)
        {
            return null;
        }

        public void set_Item(ref int index, object value)
        {
        }
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
چرا دارین ترکیب شون می کنین؟ IList.this رو که نباید ترکیب کنین با new virtual ای که خودتون دارید تعریف می کنید، IList.this رو جداگانه باید پیاده سازی کنین.
کد:
    class Test2 : ArrayList, IList
    {

        object IList.this[int index]
        {
            get
            {
                return null;
            }
            set
            {
            }
        }

        public new virtual Control this[int index]
        {
            get
            {
                return null;
            }
        }
    }
}

تعریف که میشه، شما نمی توانید پیاده سازیش کنید، برای ارتباط با سایر زبان ها است، اینجا رو در سایت مایکروسافت ببینید :
Bookmarks.Item property
کد:
Bookmark this[
    ref Object Index
] { get; }
Bookmark this.png

Bookmarks this.png

اون indexer عملا متد های get و set ئه، indexer یک موجودیت جدا نیست که بگیم پروپرتی داریم و متد و indexer. در #C اینطوری میشه پیاده سازیش کرد :
کد:
        public object get_Item(ref int index)
        {
            return null;
        }

        public void set_Item(ref int index, object value)
        {
        }

ممنون استاد علی
برای متد که میشه ref گذاشت
برای ایندکسر میگفتن میشه گذاشت که انگار در حالت های خاصی میشه . پس کلا نمیشه گذاشت یا مرسوم نیست یا سخت هه گذاشتن اش
:green: واسه من که ارور داد :green:
 

the_king

مدیرکل انجمن
ممنون استاد علی
برای متد که میشه ref گذاشت
برای ایندکسر میگفتن میشه گذاشت که انگار در حالت های خاصی میشه . پس کلا نمیشه گذاشت یا مرسوم نیست یا سخت هه گذاشتن اش
:green: واسه من که ارور داد :green:
توضیحی که میتونم بدم اینه، یک چیزی به نام Indexer تعریف شده که خاص #C ئه و برای سازگاری با NET. و سایر زبانها بصورت متد های _get و _set پیاده سازی شده که زبان های دیگه هم بتوانند ازش استفاده کنند، محدودیت های متد ها طبیعتا کمتر ئه اما در خود #C قرار نیست Indexer بتونه پارامتر های ref و out داشته باشه و کامپایلر جلوی کامپایلشو میگیره، نه اینکه از نظر فنی امکانپذیر نباشه، جزو قواعد زبان نیست. اما در عین حال در زبان های دیگه ممکنه اصلا indexer معنی نداشته نباشه، یا ref و out داشته باشه. برای ارتباط برقرار کردن #C با اون Indexer ها قواعد زبان رعایت نمیشه، موقع تعریف Indexer ای که از زبان دیگه ای وارد #C میشه همچین حالت هایی هست که ref و out داشته باشند، اونها بر اساس قواعد زبان مبدا همچین حالتی رو دارند، نه #C. به این معنا نیست که خودتون بتوانید همون کد رو در #C بنویسید و کامپایل کنید.
 

SU-57

Active Member
با سلام مجدد

این سوالاتی که می پرسم فقط از آقا سجاد نیست اگه استاد علی عزیز می تونن در فهم مطلب کمک کنن خوشحال میشم نظر ایشون رو بدونم حتی اگه یکی دو خط باشه که اذیت نشن

آقا سجاد من 4 روزه روی این قسمت 11 گیر کردم روی enum . شما نوشتی که من هر چی مینویسم شما کاری نداشته باشید فعلا ولی من نمی تونستم بفهمم شما داری چیکار می کنی خلاصه تونستم با گشتن تو اینترنت بفهمم این enum چیه و ارتباطش رو با عملگر های بیتی

الان فقط یک چیزی رو متوجه نشدم که چیه که تو کد می نویسم ولی فقط نتیجه ها رو

کد:
5 | 13 = 13

5 ^ 13 = 8


16 | 4 = 20

16 & 4 = 0

حالا ما اینا رو بدست آوردیم چه کمکی تو برنامه نویسی می کنه و کابردش چیه

یا در عکس زیر که شما می خوای ببینی Tir توی mymah هست یا نه که آخرش هم عدد 66 میده

عکس

یا شما enum رو اینطوری نوشتی

کد:
public enum mah { farvardin = 1, Irdibehesht = 2, Khordad = 4};

اولا چرا باید توان 2 باشن و اگه نباشن چی می شه چون اگه اون عدد ها رو ندیم خودش از صفر شروع می کنه به شماره گذاری و یا اینکه چرا ما عدد ها رو اینجوری نمییدم مثلا 1 و 2 و 3 و 4 و ...

یا شما کد زیر رو نگاه کن

کد:
public enum mah {};

mah mymah = ....;

من الان public رو بر میدارم باز هم درست کار می کنه. بعد کلمه کلیدی enum یک نوع داده ایه اما شما در خط پایینش mah رو نوشتی بعد جلوش mymah رو نوشتی یعنی اینجا mah یک نوع داده ایه؟

این enum رو هم بیرون رویداد نوشتی و گفتی که فعلا مهم نیست بدونید ولی من می خوام بدون چرا؟ چون من داخل رویداد نوشتم دیدم که خطا میده و نمی شه و اولین نوع داده ای و متغیری هست که نمی شه داخل رویداد نوشت

اگه می خوای جواب بدی نمی خواد تک تک نقل قول کنی که خسته بشی یکجا بگی من متوجه میشم. من تا نفهمم اینا چیه از ساعت 1 و 3 دقیقه قسمت 11 جلوتر نمیرم
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا