صفحه 4 از 6 اولاول ... 23456 آخرآخر
نمایش نتایج 121 تا 160 از 202

نام تاپیک: تاپیک جامع برای مقایسه ی VB.net و سی شارپ

  1. #121
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    بعد از اون ایرادهائی که گرفتم، ترجیح میدم این دو رو به گونه ای مقایسه کنم که ارزشهای بیسیک.نت نادیده گرفته نشه:


    ابتدا عیب ها و مزیتهای بیسیک.نت رو مورد بررسی قرار میدیم :
    1 مربوط به عیب بیسیک.نت و 2 مربوط به مزیت حاصل شده در آن است.


    --- بیسیک.نت : تنظیمات متفاوت برای کامپایل کردن کدها.
    --- سی# : تا جائی که میدونم، چنین چیزی نداره.
    1) عیب : عدم هماهنگی بین کدهای نوشته شده توسط هر برنامه نویس.
    2) مزیت : کنترل برنامه نویس بر کامپایل کدهای نوشته شده توسط خودش.


    --- سی# : به مقررات کدنویسی پای بند است.
    --- بیسیک.نت : زیاد به مقررات کدنویسی پایبند نیست، مثل استفاده از From1.Show() بدون ایجاد نمونه از Form1.
    1) عیب : کد نویسی بصورت غیر اصولی.
    2) مزیت : سازگاری با VB.


    --- سی# : پارامترهای اختیاری، نداره.
    --- بیسیک.نت : پارامترهای اختیاری داره.
    توضیح : باید توجه داشت که وقتی یک متد دارای پارامترهای متفاوت هست، معمولا پیاده سازی های متفاوتی هم داره.
    1) عیب : نمیدونم!
    2) مزیت : سرعت در پیاده سازی متدهای خاص و همچنین ارتباط راحت تر با Office


    --- بیسیک.نت : کلمه کلیدی With داره.
    --- سی# : کلمه کلیدی With نداره.
    توضیح : با عملیات Copy و Paste میتوان نتیجه مطلوب رو بکار برد.
    1) عیب : نمیدونم!
    2) مزیت : سرعت در نوشتن کدهای تکراری.


    --- بیسیک.نت : Error Handling جالبی رو با Catch ارائه میده، یعنی Catch ex As IO.FileLoadException When attempt < 3
    --- سی# : تا اونجائی که من میدونم، چنین چیزی نداره.


    --- سی# : از Switch استفاده میکنه و به طبع باید break ها رو هم در آخر هر case قرار بده.
    --- بیسیک.نت : از کلمه کلیدی Select Case استفاده میکنه و احتیاجی به آوردن break بعد از هر Case نیست و انعطاف بیشتری داره.
    1) عیب : نمیدونم!
    2) مزیت : افزایش سرعت در کد نویسی برای Select Case های طولانی.


    --- بیسیک.نت : بیشتر به زبان گفتاری نزدیکه و سعی داره مفاهیم برنامه نویسی رو به زبان گفتاری نزدیکتر کنه.
    --- سی# : از علائم و کلمات خاص برنامه نویسی، استفاده میکنه.
    توضیح : یافتن بلاکها به کمک علائم } و { راحت تر است.
    1) عیب : نوشتن کدها طولانی تر میشه.
    2) مزیت : کدها راحت تر فهمیده میشه.




    حال، عیب ها و مزیتهای سی# را مورد بررسی قرار میدهیم :
    1 مربوط به عیب سی# و 2 مربوط به مزیت حاصل شده در آن است.


    --- سی# : دارای عملگرهای کاهش و افزایش است.
    --- بیسیک.نت : چنین عملگری ندارد.


    --- سی# : سنتکس سی#، انعطاف بیشتری داره، مثلا میتوان از عمل انتساب بصورت چندگانه استفاده کرد یا از (,) سود برد و ...
    --- بیسیک.نت : تا جائی که من میدونم، سنتکس بیسیک.نت، انعطاف کمتری به نسبت سی# داره.
    1) عیب : نمیدونم!
    2) مزیت : افزایش سرعت در کد نویسی و کاهش حجم کدهای نوشته شده.


    --- سی# : به بزرگی و کوچکی حروف، حساس است.
    --- بیسیک.نت : حساس نیست و برای حساس شدن به بزرگی و کوچکی اشیاء ایجاد شده، نیاز به کاراکترهای [ و ] داره.
    1) عیب : ایجاد دو نام که تنها تفاوتشون ناشی از کوچکی و بزرگی باشه، میتونه جالب نباشه یا یک برنامه نویس مبتدی، با مشکل روبرو بشه.
    2) مزیت : کنترل بیشتر بر نامهای تولید شده توسط برنامه نویس.


    --- هم در بیسیک.نت هم در سی#، یک دستور را میتوان در چند خط نوشت، اما در سی# این کار راحت تر صورت میگیرد.

    --- برنامه کامپایل شده توسط سی# حجم کمتری به نسبت همین برنامه در بیسیک.نت دارد.

    --- در سی# موارد زیر هم ساپورت میشه :
    1. Iterators
    2. اشاره گرها
    3. متدهای بدون نام
    4. کامنت در چند خط


    این مطلب با توضیحات دوستان BlackDal،
    __H2__
    و بخصوص linux، ویرایش شد...



    میدونم که گفتن جملاتی مثل "این زبان واسه small application" یا "این زبان سنتکس اش جالب تره" یا ... جملاتی هست که باعث میشه بحث منحرف بشه. ولی مطمئن هستم که اگه مشخصات هر زبان رو توضیح بدیم و مقایسه بشه، آنوقت خود برنامه نویس باید تشخیص بده که کدومش خوب هست و دیگه بحث منحرف نمیشه.
    آخرین ویرایش به وسیله PC2st : شنبه 22 اردیبهشت 1386 در 18:40 عصر دلیل: ویرایش شد 3

  2. #122
    فکر کنم برای درک اینکه بحث بیهوده ای در این تاپیک پیش گرفته شده، یک بار دیگه نقل قول آخر پست 42 خونده بشه، کافی باشه.

  3. #123
    --- سی# : به مقررات کدنویسی پای بند است و مثلا باید تمام casting ها قید بشه، در غیر اینصورت برنامه کامپایل نخواهد شد.
    --- بیسیک.نت : زیاد به مقررات کدنویسی پایبند نیست و مثلا لازم نیست همه casting ها قید بشه.
    1) عیب : کد نویسی بصورت غیر اصولی (کثیف).
    2) مزیت : سرعت در عملیات کد نویسی.
    سعی کردی برنامه ای رو در حالت Option Explicit On بنویسی؟و لابد نمی دونی که این گزینه الان دیگه جز تنظیمات کامپایلر شده (علاوه بر امکان استفاده دز کد)


    --- بیسیک.نت : Error Handling جالبی رو با Catch ارائه میده، یعنی Catch ex As IO.FileLoadException When attempt < 3
    --- سی# : تا اونجائی که من میدونم، چنین چیزی نداره.
    صد البته که داره، داخل پرانتز یک مقدار استثنا تعریف کنید

    --- سی# : دستورات با ; پایان میپذیرند، پس حتی میتوان ادامه عبارات داخل " را در خطوط بعدی نوشت.
    --- بیسیک.نت : دستورات در هر خط پایان میپذیرند مگر اینکه از _ استفاده کنیم ولی برای عباراتی که داخل " هستند (رشته ها) نمیتوانیم رشته ای را در چند خط بنویسیم و از _ استفاده کنیم (چون بعنوان یک کاراکتر از رشته به حساب میآد) و مجبور میشیم که از عملگر += استفاده کنیم.
    1) عیب : افزایش حجم عملیات برنامه، ناشی از عمل انتساب.
    2) مزیت : نمیدونم!
    متاسفانه اشتباهه!

    a = "string and " & _
    "more!"
    --- سی# : دارای عملگرهای کاهش و افزایش است.
    --- بیسیک.نت : چنین عملگری ندارد.
    1) عیب : نمیدونم!
    2) مزیت : سرعت در کد نویسی و انعطاف بیشتر.
    اگر به جای

    i = i +1
    بنویسید

    i++
    سرعت کدنویسی خود را افزایش داده اید؟؟؟


    --- سی# : در ساختار Error Catching به گونه ایست که ارورهای بیشتری رو Catch میکنه، مثل متغیرهای مقدار اولیه نگرفته یا کد مرده و ...
    --- بیسیک.نت : تا جائی که اطلاع دارم، نداره.
    در وی بی دات نت امکان غلط یابی هنگام کد به مراتب بیشتر از سی شارپ است.
    البته این حرکت مایکروسافت به نظر من در پروژه های بزرگ (به خصوص با یک کامپیوتر ضعیف) آزار دهندست!



    --- سی# : کامنتها دارای انعطاف بیشتری هستند. مثل کامنتهای چند خطی، XML comments.
    --- بیسیک.نت : کامنتها دارای انعطاف کمتری هستند.
    1) عیب : نمیدونم!
    2) مزیت : XML comments برای طراحی کلاسها، کامنتهائی حرفه ای به وجود میآره و کامنتهای چند خطی هم به درد توضیحات طولانی میخوره.
    در وی بی دات نت قبل از عنوان یک متد سه علامت کوتیشن ( ' ) رو پشت سر هم بذار (مثل /// در سی شارپ) !



    سی# : به بزرگی و کوچکی حروف، حساس است.
    بیسیک.نت : حساس نیست.
    1) عیب : ممکنه برای کاربر تازه کار، مشکل به وجود بیاره.
    2) مزیت : کنترل بیشتر بر نامها، مثلا شئ ایجاد شده میتونه هم نام با نوع داده باشه ولی حرف اولش کوچکتر باشه، پس در نتیجه، نوع شئ راحت تر تشخیص داده میشه.
    نمی خوای در مورد مزیتی که نوشتی دوباره فکر کنی؟؟؟


    قبلاً هم در پست دیگری به این مطلب اشاره کرده ام که تمامی این تفاوت ها فقط و فقط تفاوت های سینتکسی هستند و بس!
    پارامترهای اختیاری در وی بی حمایت می شوند. اما مایکروسافت برنامه نویسان هر رو زبان را به استفاده از متد های چند گانه دعوت کرده است!
    متد های بی نام در سی شارپ پشتیبانی می شوند اما مایکروسافت آن را مذمت کرده و به برنامه نویسان هر دو گروه توصیه در نامگذاری آنها کرده!
    ...

    بابت پایان بخشیدن به بحث متد های بی نام باید بگم همونطوری که در بالا گفتم این امکان در وی بی دات نت پشتیبانی نمی شه

    تمامی این تفاوت ها و امثالهم فیچر هایی هستند که از زبان های قبلی



    دوست عزیز، منظور این نیست که بیسیک.نت توانائی مقابله با سی# رو نداره. منظور سنتکس بیسیک.نت هست، علاوه بر موارد قبلی که گفته شد، با فرض اینکه یک برنامه نویس تازه کار، بخواد در محیط بیسیک.نت شروع به کد نویسی کنه، ممکنه که خیلی از مفاهیم برنامه نویسی رو نفهمیده باشه، مثلا به قول دوستمون:
    نقل قول:
    نوشته شده توسط SalarSoft
    برای مثال می تونید از سایر فرم ها های پروژه تان بدون تعریف نمونه استفاده کنید.

    پس در واقع برنامه نویسی میکنه و از جزئیاتش چیزی نمیفهمه و میاد در سی# مینویسه:
    کد:
    form1.Show();
    کامپایل ارور میده و میگه که کلاس نمونه سازی نشده! (اصلا چنین شئ ائی وجود نداره !)
    این هم یکی از تفاوت های این دو زبان است. و باز هم مایکروسافت به برنامه نویسان وی بی دات نت توصیه کرده از استفاده از نسخه پیش ساخته اشیا پرهیز کنند چون باعث به خطر افتادن برنامه میشود. (هرچند خود من استفاده می کنم)




    من هم اطمینان میدهم مطلقا این حرف شما اشتباه است و فقط در مورد برنامه نویسان مبتدی صحت داره، شما اگر به هر دو زبان مسط باشید باید بدانید هر کدام این زبان ها ابزار هایی دارند که در دیگری یافت نمی شود ،( منظورم اصلا دات نت فریمورک نیست) ، در نسخه 2003 تفاوت این دو زیاد بود ولی در 2005 این تفاوت بسیار کم شده ، ولی به صفر نرسیده است!
    Iterators , Operator overloading ,متد های بی نام و .....
    به عنوان یک مثال خیلی پیش پا افتاده از keyword های این دو زبان: کلمه using قبلا(2003) در VB وجود نداشت! یا مثلا with که در VB خیلی کد نویسی رو راحت میکنه در #C کجاست؟
    یا مثلا ممکنه برای کاری در #C یک خط کد کافی باشه ولی در VB چند خط و برعکس!
    مطالب خیلی پیشرفته تری وجود داره که برید مطالعه کنید تا متوجه بشید.

    مصمئنا و بدون شک ماهیت هر کدام از این دو زبان باعث می شود برخی از کارها در یکی از این دو راحت تر انجام شود.
    بله! بدون شک! تفاوت وجود دارد.
    اما بحث اساسی بر سر برتری است



    برای درک کامل مطلب به کدهای زیر که شامل پیاده سازی رابطهای فوق در #C و VB و استفاده از آنها هستند دقت کنید.
    بدیهی است که به علت پارتی بازی #C از دو رابط فوق کد تعریف به شدت کاهش یافته (3+1 متد تعریف اجباری وجود دارد که باید تعریف شوند) ولی کد استفاده کاملاً یکسان است و دارای یک مقدار کدنویسی ثابت هستند، این افزایش کد هم در هیچ یک از رابطهای دیگر وجود دیده نمیشود.
    البته راه حل دیگری هم در VB وجود دارد، که بسیار کم کد است و به درستی و سرعت کار میکند ولی از نظر زیرساختی نمیتوان آن را معادل Iterators به حساب آورد ولی همان کار را انجام میدهد
    کد:
    //C#‎ declare
    --------------------------------------------------
    public class SampleClass
    {
    public static System.Collections.IEnumerable SampleIterator(int maxvalue)
    {
    for (int iCounter = 0; iCounter <= maxvalue; iCounter++)
    {
    yield return iCounter;
    }
    }
    }

    //C#‎ using
    --------------------------------------------------
    foreach (int i in SampleClass.SampleIterator(7))
    {
    //Any code.
    }
    کد:
    'VB.Net declare
    --------------------------------------------------
    Public Class SampleClass

    Private Class IEnumerableClass
    Implements System.Collections.IEnumerator
    Implements System.Collections.IEnumerable

    Private iCounter As Integer = -1
    Private ReadOnly maxvalue As Integer

    Public Sub New(ByVal maxvalue As Integer)
    MyBase.New()
    Me.maxvalue = maxvalue
    End Sub

    Private ReadOnly Property Current() As Object Implements System.Collections.IEnumerator.Current
    Get
    Return Me.iCounter
    End Get
    End Property

    Private Function MoveNext() As Boolean Implements System.Collections.IEnumerator.MoveNext
    Me.iCounter += 1
    Return (Me.iCounter <= Me.maxvalue)
    End Function

    Private Sub Reset() Implements System.Collections.IEnumerator.Reset
    Me.iCounter = -1
    End Sub

    Private Function GetEnumerator() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator
    Return Me
    End Function

    End Class

    Public Shared Function SampleIterator(ByVal maxvalue As Integer) As System.Collections.IEnumerable
    Return New IEnumerableClass(maxvalue)
    End Function

    End Class


    //VB.Net using
    --------------------------------------------------
    For Each i As Integer In SampleClass.SampleIterator(7)
    'Any Code.
    Next
    هر چی به این کد ها نگاه کردم نتونستم خودمو قانع کنم که با نیت یکسانی نوشته شده اند!



    ما حصل کلام اینکه:
    تفاوت وجود داره اما برتری یکی نسبت به دیگری نه!

  4. #124
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    سعی کردی برنامه ای رو در حالت Option Explicit On بنویسی؟و لابد نمی دونی که این گزینه الان دیگه جز تنظیمات کامپایلر شده (علاوه بر امکان استفاده دز کد)
    در این مورد، فقط بعنوان مثال به casting اشاره کردم تا مشخص بشه که بیسیک.نت سخت گیری نمیکنه برای کد نویسی صحیح... صد البته همون Form1.show هم در این مورد قرار میگیره. حالا شما گفتی Option Explicit On داره، چه بهتر :) ( برای اینکه دیگه مشکلی پیش نیاد، این مورد رو ویرایش کردم )



    متاسفانه اشتباهه!

    a = "string and " & _
    "more!"

    منظورم رو خوب منتقل نکردم، پس با کد منظورم رو بیان میکنم:

    dim sql as string = "SELECT *" & vbCrLf
    sql += "FROM SomeSuchTable" & vbCrLf
    sql += "WHERE ID='WhatHaveYou'" & vbCrLf
    sql += "ORDER BY ThisAndThatField ASC "

    حالا اگه شد، کد فوق رو بدون += در چند خط خرد کنید!



    در مورد عملگر ++ و افزایش سرعت:
    خودت بگو، کدوم سریعتره ؟

    int a = 2, b = 3;
    int c = ( ++a ) * ( ++b );

    یا

    int a = 2, b = 3;
    a += 1;
    b += 1;
    int c = a * b;

    که در موارد پیچیده تر، بیشتر بروز پیدا میکنه.



    صد البته که داره، داخل پرانتز یک مقدار استثنا تعریف کنید
    نداره :) منظورم اون قسمت When attempt < 3 بود.



    در وی بی دات نت امکان غلط یابی هنگام کد به مراتب بیشتر از سی شارپ است.
    البته این حرکت مایکروسافت به نظر من در پروژه های بزرگ (به خصوص با یک کامپیوتر ضعیف) آزار دهندست!
    اتفاقا برعکس، همین سخت گیری سی#، اشکال زدائی برنامه رو از همون اول میگیره و باعث میشه که مشکل برنامه به جاهای حادتر نرسه تا در پروژه های بزرگتر، کمتر به مشکل برسیم و البته این نظر شماست و قابل احترامه...



    نمی خوای در مورد مزیتی که نوشتی دوباره فکر کنی؟؟؟
    شما فکر کنید :) در خیلی مواقع، شئ ساخته شده از FileInfo رو با نام fileInfo بکار میبرم یا مثلا برای پارامترهای متد، انواع Point را با پارامتر point در قسمت پارامترها ذکر میکنم.



    قبلاً هم در پست دیگری به این مطلب اشاره کرده ام که تمامی این تفاوت ها فقط و فقط تفاوت های سینتکسی هستند و بس!
    مورد سنتکس و اثرش روی IL رو میتونید در مورد مقایسه switch و Select Case مقایسه کنید :)



    در وی بی دات نت قبل از عنوان یک متد سه علامت کوتیشن ( ' ) رو پشت سر هم بذار (مثل /// در سی شارپ) !
    ممنون. پست رو ویرایش کردم و این یک عیب رو از بیسیک.نت برداشتم.

  5. #125
    کاربر دائمی آواتار linux
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    پست
    2,313
    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    در این مورد، فقط بعنوان مثال به casting اشاره کردم تا مشخص بشه که بیسیک.نت سخت گیری نمیکنه برای کد نویسی صحیح... صد البته همون Form1.show هم در این مورد قرار میگیره. حالا شما گفتی Option Explicit On داره، چه بهتر :) ( برای اینکه دیگه مشکلی پیش نیاد، این مورد رو ویرایش کردم )



    a = "string and " & _
    "more!"

    منظورم رو خوب منتقل نکردم، پس با کد منظورم رو بیان میکنم:

    dim sql as string = "SELECT *" & vbCrLf
    sql += "FROM SomeSuchTable" & vbCrLf
    sql += "WHERE ID='WhatHaveYou'" & vbCrLf
    sql += "ORDER BY ThisAndThatField ASC "

    حالا اگه شد، کد فوق رو بدون += در چند خط خرد کنید!



    در مورد عملگر ++ و افزایش سرعت:
    خودت بگو، کدوم سریعتره ؟

    int a = 2, b = 3;
    int c = ( ++a ) * ( ++b );

    یا

    int a = 2, b = 3;
    a += 1;
    b += 1;
    int c = a * b;

    که در موارد پیچیده تر، بیشتر بروز پیدا میکنه.




    نداره :) منظورم اون قسمت When attempt < 3 بود.




    اتفاقا برعکس، همین سخت گیری سی#، اشکال زدائی برنامه رو از همون اول میگیره و باعث میشه که مشکل برنامه به جاهای حادتر نرسه تا در پروژه های بزرگتر، کمتر به مشکل برسیم و البته این نظر شماست و قابل احترامه...




    شما فکر کنید :) در خیلی مواقع، شئ ساخته شده از FileInfo رو با نام fileInfo بکار میبرم یا مثلا برای پارامترهای متد، انواع Point را با پارامتر point در قسمت پارامترها ذکر میکنم.


    مورد سنتکس و اثرش روی IL رو میتونید در مورد مقایسه switch و Select Case مقایسه کنید :)
    ممنون. پست رو ویرایش کردم و این یک عیب رو از بیسیک.نت برداشتم.
    بجای این بحث ها چرا نمی آید در مورد طراحی یک زبان جدید برنامه نویسی برای .نت کار کنید.فکر کنید یک زبان برنامه نویسی به زبان فارسی دارید.
    مثلا اینجوری کد بنویسید
    کلاس فرم1
    رویداد بارگذاری فرم
    بشناس عدد ازنوع عددصحیح
    عدد = 100
    من.متن=عدد
    پایان رویداد
    پایان کلاس

    در ضمن
    پس زمینه درست هست


    dim sql as string = "SELECT *" & vbCrLf
    sql += "FROM SomeSuchTable" & vbCrLf
    sql += "WHERE ID='WhatHaveYou'" & vbCrLf
    sql += "ORDER BY ThisAndThatField ASC "

    این کد را بصورت زیر هم می توانید بنویسید


    Dim sql AsString = "SELECT *" & vbCrLf & _
    "FROM SomeSuchTable" & vbCrLf & _
    "WHERE ID='WhatHaveYou'" & vbCrLf & _
    "ORDER BY ThisAndThatField ASC "

    همه عملگر های =+ و =- و =* و =& را می توانید در ویژوال بیسیک استفاد کنید
    عمگرهای >> و << هم می توانید استفاده کنید
    در مورد نام گذاری من جایی ندیدم که پیشنهاد بدهند که از نام یک کلاس به همان صورت و تنها با بزرگ یا کوچک نوشتن حرف یک مقدار جدید ساخته شود.
    حالا اینجا را ببنید
    کد ویبی

    PublicFunction tst(ByVal a AsInteger) AsInteger
    SelectCase a
    Case 1
    a = 10
    Return a
    Case 2
    a = 20
    Return a
    EndSelect
    EndFunction


    کد سی شارپ

    publicint tst(int a)
    {
    switch (a)
    {
    case 1:
    a = 10;
    return a;
    case 2:
    a = 20;
    return a;
    }
    return a;
    }


    il ویبی

    .method
    public instance int32 tst(int32 a) cil managed
    {
    .maxstack 2
    .locals init (
    [0] int32 tst,
    [1] int32 VB$t_i4$L0)
    L_0000: ldarg.1
    L_0001: ldc.i4.1
    L_0002: sub
    L_0003:
    switch (L_0012, L_0018)
    L_0010: br.s L_001e
    L_0012: ldc.i4.s 10
    L_0014: starg.s a
    L_0016: ldarg.1
    L_0017: ret
    L_0018: ldc.i4.s 20
    L_001a: starg.s a
    L_001c: ldarg.1
    L_001d: ret
    L_001e: ldloc.0
    L_001f: ret
    }


    il سی شارپ

    .method
    public hidebysig instance int32 tst(int32 a) cil managed
    {
    .maxstack 2
    .locals init (
    [0] int32 CS$0$0000)
    L_0000: ldarg.1
    L_0001: stloc.0
    L_0002: ldloc.0
    L_0003: ldc.i4.1
    L_0004: sub
    L_0005:
    switch (L_0014, L_001a)
    L_0012: br.s L_0020
    L_0014: ldc.i4.s 10
    L_0016: starg.s a
    L_0018: ldarg.1
    L_0019: ret
    L_001a: ldc.i4.s 20
    L_001c: starg.s a
    L_001e: ldarg.1
    L_001f: ret
    L_0020: ldarg.1
    L_0021: ret
    }

    نتیجه هر چقدر کدها شبیه هم باشند خروجی های il هم شبیه ترند برنامه نویسان ویبی با کنار گذاشتن کتابخانه microsft.visualbasic که توابع ویبی را در اختیار می گذارد و با استفاده کردن از توابع .نت می توانند یک برنامه استاندارد .نت بنویسند.
    در مورد اختلاف بین اندازه فایلهای سی شارپ و ویبی اگر شما این کدها بالا را کامپایل کنید 8 کیلوبایت فایل exe ویبی بزرگتر خواهد بود بخاطر استفاده از کلاس my که در C#‎ نیست
    یعنی شما هر پروژه ویبی که میسازید خود ویبی کلاس my را به پروژه شما اضافه می کنید هر چقدر برنامه بزرگتر باشد کلاس My هم بزرگتر شده و حجم فایل ویبی بیشتر خواهد شد

  6. #126

    نقل قول:
    در وی بی دات نت امکان غلط یابی هنگام کد به مراتب بیشتر از سی شارپ است.
    البته این حرکت مایکروسافت به نظر من در پروژه های بزرگ (به خصوص با یک کامپیوتر ضعیف) آزار دهندست!
    اتفاقا برعکس، همین سخت گیری سی#، اشکال زدائی برنامه رو از همون اول میگیره و باعث میشه که مشکل برنامه به جاهای حادتر نرسه تا در پروژه های بزرگتر، کمتر به مشکل برسیم و البته این نظر شماست و قابل احترامه...
    در سی شارپ دات نت هنگام ساخت پروژه لیست خطا ها و اخطار ها رو نشون میده. اما در وی بی دات نت بعد از دکمه Enter هر خط غلط یابی میشه!! نظر من نیست فناوری ه مایکروسافته!!


    خودت بگو، کدوم سریعتره ؟
    کد:
    int a = 2, b = 3;
    int c = ( ++a ) * ( ++b );
    یا
    کد:
    int a = 2, b = 3;
    a += 1;
    b += 1;
    int c = a * b;
    که در موارد پیچیده تر، بیشتر بروز پیدا میکنه.
    اگر منظورت سرعت اجراست که برابرند. اما اگر منظورت سرعت نوشتن کدهاست باید ازت بخوام یک روتین برای خواندن فایل های متنی در سی شارپ بنویسی و البته در وی بی دات نت (با فضای نامی My)


    نداره :) منظورم اون قسمت When attempt < 3 بود.

    // try catch exception
    int zero = 0;
    try
    {
    int div = 100/zero;
    }
    catch(DivideByZeroException)
    {
    Console.WriteLine("Division by zero exception passed");
    }




    نقل قول:
    نمی خوای در مورد مزیتی که نوشتی دوباره فکر کنی؟؟؟
    شما فکر کنید :) در خیلی مواقع، شئ ساخته شده از FileInfo رو با نام fileInfo بکار میبرم یا مثلا برای پارامترهای متد، انواع Point را با پارامتر point در قسمت پارامترها ذکر میکنم.
    این چه حرفیه که میزنی دوست عزیزم؟؟!!
    نکنه فکر می کنی در وی بی نمی تونید شئ ساخته شده از FileInfo رو با نام fileInfo بکار ببری؟؟
    PascalCase , camelCase و تمامی متد های نامگذاری متغیر ها در تمامی زبان ها پشتیبانی می شوند. شما در همه زبان های می توانید بزرگی و کوچکی نام متغیر ها را خودتان انتخاب کنید.


    در مورد بقیه موارد هم بابک خان توضیح دادند

  7. #127
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    نقل قول نوشته شده توسط linux
    این کد را بصورت زیر هم می توانید بنویسید

    Dim sql AsString = "SELECT *" & vbCrLf & _
    "FROM SomeSuchTable" & vbCrLf & _
    "WHERE ID='WhatHaveYou'" & vbCrLf & _
    "ORDER BY ThisAndThatField ASC "

    در مورد vbCrLf، باید از عمگر & استفاده کرد، و فکر نمیکنید که استفاده از این عملگر تاثیری در سرعت برنامه میگذاره (از لحاظ حجم انجام عملیات) ؟



    جناب linux، در مورد Select و switch تا حدودی حق با شماست ولی در نظر داشته باشید که در یک فرم خالی در بیسیک.نت، متد Form1_Load خروجی IL به شکل زیر داره:

    .method private instance void Form1_Load(object sender,
    class [mscorlib]System.EventArgs e) cil managed
    {
    // Code size 1 (0x1)
    .maxstack 8
    IL_0000: ret
    } // end of method Form1::Form1_Load

    حال کدهای زیر رو در Form1_Load در بیسیک.نت مینویسیم:

    Dim A = 0, B AsByte
    SelectCase A
    Case 0, 1, 2
    B = 9
    Case 3
    B = 10
    EndSelect

    یک دستور Select ساده، حالا برنامه رو کامپایل کنید و دوباره خروجی IL رو در مورد Form1_Load نگاه کنید، خروجی اش شبیه به زیر هست:

    .method private instance void Form1_Load(object sender,
    class [mscorlib]System.EventArgs e) cil managed
    {
    // Code size 114 (0x72)
    .maxstack 3
    .locals init ([0] object A,
    [1] uint8 B,
    [2] object VB$t_ref$L0)
    IL_0000: ldc.i4.0
    IL_0001: box [mscorlib]System.Int32
    IL_0006: stloc.0
    IL_0007: ldloc.0
    IL_0008: stloc.2
    IL_0009: ldloc.2
    IL_000a: ldc.i4.0
    IL_000b: box [mscorlib]System.Int32
    IL_0010: ldc.i4.0
    IL_0011: call object [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Operators:: CompareObjectEqual(object,
    object,
    bool)
    IL_0016: call bool [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Conversions ::ToBoolean(object)
    IL_001b: brtrue.s IL_004d
    IL_001d: ldloc.2
    IL_001e: ldc.i4.1
    IL_001f: box [mscorlib]System.Int32
    IL_0024: ldc.i4.0
    IL_0025: call object [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Operators:: CompareObjectEqual(object,
    object,
    bool)
    IL_002a: call bool [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Conversions ::ToBoolean(object)
    IL_002f: brtrue.s IL_004d
    IL_0031: ldloc.2
    IL_0032: ldc.i4.2
    IL_0033: box [mscorlib]System.Int32
    IL_0038: ldc.i4.0
    IL_0039: call object [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Operators:: CompareObjectEqual(object,
    object,
    bool)
    IL_003e: call bool [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Conversions ::ToBoolean(object)
    IL_0043: brtrue.s IL_004d
    IL_0045: ldc.i4.0
    IL_0046: box [mscorlib]System.Boolean
    IL_004b: br.s IL_0053
    IL_004d: ldc.i4.1
    IL_004e: box [mscorlib]System.Boolean
    IL_0053: call bool [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Conversions ::ToBoolean(object)
    IL_0058: brfalse.s IL_005f
    IL_005a: ldc.i4.s 9
    IL_005c: stloc.1
    IL_005d: br.s IL_0071
    IL_005f: ldloc.2
    IL_0060: ldc.i4.3
    IL_0061: box [mscorlib]System.Int32
    IL_0066: ldc.i4.0
    IL_0067: call bool [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Operators:: ConditionalCompareObjectEqual(object,
    object,
    bool)
    IL_006c: brfalse.s IL_0071
    IL_006e: ldc.i4.s 10
    IL_0070: stloc.1
    IL_0071: ret
    } // end of method Form1::Form1_Load

    حالا دستور switch به شکل زیر باشه در سی#

    byte A = 0, B;
    switch( A )
    {
    case 0:
    case 1:
    case 2:
    B = 9;
    break;
    case 3:
    B = 10;
    break;
    }

    خروجی IL تنها به اندازه زیر است:

    .method private hidebysig instance void Form1_Load(object sender,
    class [mscorlib]System.EventArgs e) cil managed
    {
    // Code size 27 (0x1b)
    .maxstack 1
    .locals init ([0] uint8 A,
    [1] uint8 CS$0$0000)
    IL_0000: ldc.i4.0
    IL_0001: stloc.0
    IL_0002: ldloc.0
    IL_0003: stloc.1
    IL_0004: ldloc.1
    IL_0005: switch (
    IL_001a,
    IL_001a,
    IL_001a,
    IL_001a)
    IL_001a: ret
    } // end of method Form1::Form1_Load

    لطفا به تفاوت کد Select من و خودتون دقت کنید! یعنی اینقدر تفاوت زیاد بود ؟!

    خب، حالا در این مورد، از نظر شما بیسیک.نت چه کار اضافی انجام داده که حجم IL اش اینقدر از سی# بیشتره؟!



    نقل قول نوشته شده توسط linux
    در مورد اختلاف بین اندازه فایلهای سی شارپ و ویبی اگر شما این کدها بالا را کامپایل کنید 8 کیلوبایت فایل exe ویبی بزرگتر خواهد بود بخاطر استفاده از کلاس my که در C#‎ نیست
    نکته جالبی بود، ممنون.

  8. #128
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    نقل قول نوشته شده توسط BlackDal
    در سی شارپ دات نت هنگام ساخت پروژه لیست خطا ها و اخطار ها رو نشون میده. اما در وی بی دات نت بعد از دکمه Enter هر خط غلط یابی میشه!!
    منظور گرفتن خطا پس از Enter یا ... نیست. منظور کنترل Catch برای متغیرهائیست که هنوز مقداری نگرفته اند یا ...



    نقل قول نوشته شده توسط BlackDal
    باید ازت بخوام یک روتین برای خواندن فایل های متنی در سی شارپ بنویسی و البته در وی بی دات نت (با فضای نامی My)
    لطفا بیشتر توضیح بدید...



    نقل قول نوشته شده توسط BlackDal
    نکنه فکر می کنی در وی بی نمی تونید شئ ساخته شده از FileInfo رو با نام fileInfo بکار ببری؟؟
    منظورم این بود :

    Point point = new Point(0,0);

  9. #129
    کاربر دائمی آواتار linux
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    پست
    2,313
    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک

    Dim sql AsString = "SELECT *" & vbCrLf & _
    "FROM SomeSuchTable" & vbCrLf & _
    "WHERE ID='WhatHaveYou'" & vbCrLf & _
    "ORDER BY ThisAndThatField ASC "

    در مورد vbCrLf، باید از عمگر & استفاده کرد، و فکر نمیکنید که استفاده از این عملگر تاثیری در سرعت برنامه میگذاره (از لحاظ حجم انجام عملیات) ؟
    در این مورد هر دو زبان il خروجی را بصورت
    "SELECT *\r\nFROM SomeSuchTable\r\nWHERE ID=\'WhatHaveYou\'\r\nORDER BY ThisAndThatField ASC "

    خواهد ساخت یعنی هیچ فرقی نمی کنه!

    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک

    جناب linux، در مورد Select و switch تا حدودی حق با شماست ولی در نظر داشته باشید که در یک فرم خالی در بیسیک.نت، متد Form1_Load خروجی IL به شکل زیر داره:
    ....
    ....
    ....

    خب، حالا در این مورد، از نظر شما بیسیک.نت چه کار اضافی انجام داده که حجم IL اش اینقدر از سی# بیشتره؟!
    نکته جالبی بود، ممنون.
    در مورد کار اضافه ویبی در تولید il برای کدی که در بالا نوشتید در زیر کاملا توضیح خواهم داد
    اما بعد
    البته اکثر وقت ها حق با من بوده.
    ببنید مشکل کار اینجاست که کد شما بی معنی هست و کد بی معنی هم مایه درد سر!
    شما مقدرا A را صفر قرار دادید و بعد حالا در یک switch می خواهید در صورتی که مقدار A
    مقادیر دیگر داشت دستورات دیگری انجام دهد.اگر من کامپایلر بودم این دستور شمارا خلاصه می کردم به صورت زیر
    A=0
    B=9
    چون A همیشه صفر هست و تنها این حالت اتفاق می افتد و همیشه هم B=9 هست به همین جهت کدی که شما نوشتید کلا بی معنی و سرکار گذاشتن کامپیوتر هست.
    کامپایلر سی شارپ این خلاصه سازی را انجام می دهد ولی بدلیل اینکه شما در تعریف متغیر ها سبکی انتخاب کردید که برای ویبی معنی جدایی از سی شارپ دارد ویبی A را به عنوان یک object در نظر می گیرد نه یک متغیر از نوع byte و این کارهای اضافی را انجام می دهد یک object را با یکسری عدد مقایسه کند و دیگر نمی تواند آن خلاصه سازی را که کامپایلر سی شارپ انجام داده انجام دهد کافی است تا شما از این روش برای تعین متغیر استفاده کنید

    Dim A As Byte = 0, B As Byte
    Select Case A
    Case 0, 1, 2
    B = 9
    Case 3
    B = 10
    End Select

    بعد از اینکار می توانید il برنامه ویبی را ببنید خیلی شبیه il سی شارپ هست.
    در پیگری این مورد اگر این دستورات را داخل یک تابع تعریف کنید کهA را به عنوان ورودی بگیرد و یک خروجی تحویل دهد چون امکان روی دادن تمام حالات برای مقدار a هست دیگر خلاصه سازی هم انجام نمی شود

    حالا این کار را انجام بدهید
    کد را به صورت زیر اصلاح کنید

    PublicFunction test2(ByVal A AsInteger, ByVal B AsInteger) AsInteger
    SelectCase A
    Case 0, 1, 2
    B = 9
    Case 3
    B = 10
    EndSelect
    Return b
    EndFunction

    و برای سی شارپ

    publicbyte tst2(byte A, byte B)

    {

    switch (A)
    {
    case 0:
    case 1:
    case 2:
    B = 9;
    break;
    case 3:
    B = 10;
    break;
    }
    return B;
    }


    حالا برید و خروجی il هر دو کد را ببنید
    il ویبی

    .method public instance int32 test2(int32 A, int32 B) cil managed
    {
    .maxstack 1
    .locals init (
    [0] int32 test2,
    [1] int32 VB$t_i4$L0)
    L_0000: ldarg.1
    L_0001: switch (L_0018, L_0018, L_0018, L_001e)
    L_0016: br.s L_0022
    L_0018: ldc.i4.s 9
    L_001a: starg.s B
    L_001c: br.s L_0022
    L_001e: ldc.i4.s 10
    L_0020: starg.s B
    L_0022: ldarg.2
    L_0023: ret
    }

    il سی شارپ

    .method public hidebysig instance uint8 tst2(uint8 A, uint8 B) cil managed
    {
    .maxstack 1
    .locals init (
    [0] uint8 CS$0$0000)
    L_0000: ldarg.1
    L_0001: stloc.0
    L_0002: ldloc.0
    L_0003: switch (L_001a, L_001a, L_001a, L_0020)
    L_0018: br.s L_0024
    L_001a: ldc.i4.s 9
    L_001c: starg.s B
    L_001e: br.s L_0024
    L_0020: ldc.i4.s 10
    L_0022: starg.s B
    L_0024: ldarg.2
    L_0025: ret
    }


    خروجی های مختلف ilبرای یک کد که در هر دو زبان به نظر می رسه که شبیه هم هستند ممکن هست بدلیل اشتباه ما در تبدیل یک کد از زبانی به زبان دیگر باشد.

  10. #130
    کاربر دائمی آواتار linux
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    پست
    2,313
    برای تعریف متغیر های هم نام ولی با تفاوت حروف بزرگ و کوچک از [] می توانید استفاده کنید

    Dim
    [point] As Point = New Point(10, 10)

  11. #131
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    اجازه دهید من هم به برخی از این ابهامات مسخره پاسخ دهم.
    --- سی# : به مقررات کدنویسی پای بند است و مثلا باید تمام casting ها قید بشه، در غیر اینصورت برنامه کامپایل نخواهد شد.
    --- بیسیک.نت : زیاد به مقررات کدنویسی پایبند نیست و مثلا لازم نیست همه casting ها قید بشه.
    1) عیب : کد نویسی بصورت غیر اصولی (کثیف).
    2) مزیت : سرعت در عملیات کد نویسی.
    دستور پیش پردازنده Option Strict On برای همین منظور است و من خودم به شخصه در تنظیمان خود محیط VS آن را به ON تنظیم کرده ام، با اینکار VB هم به همان اندازه #C لجباز میشود و کوچکترین تبدیلات را هم انجام نمیدهد و باید تبدیلات را صراحتاً انجام داد.

    --- سی# : در ساختار Error Catching به گونه ایست که ارورهای بیشتری رو Catch میکنه، مثل متغیرهای مقدار اولیه نگرفته یا کد مرده و ...
    --- بیسیک.نت : تا جائی که اطلاع دارم، نداره.
    اصلاً و ابداً !!!! VB اینها را به دقت عنوان Warning گزارش (و تازه بعد از پایان یافتن تایپ خط جاری اینکار را میکند و مثل #C آنرا به زمان کامپایل نمی اندازد) و میتوان در تنظیمات پروژه اینها را به عنوان Error تنظیم کرد که در این حالت از کامپایل هم جلوگیری میشود ولی درستش همان Warning است.

    در سی شارپ دات نت هنگام ساخت پروژه لیست خطا ها و اخطار ها رو نشون میده. اما در وی بی دات نت بعد از دکمه Enter هر خط غلط یابی میشه!! نظر من نیست فناوری ه مایکروسافته!!
    دقیقاً ! اینکار VB از آن کارهای بشدت مورد علاقه من است و Warning ها و Error ها را به زمان کامپایل نمی اندازد و میتوانید به محض کد نویسی هر خط از لیست دقیق آنها مطلع شوید و بفمهید که خط تایپی شما موجب شده فلان متغییر مرده شود و دیگر در هیچ جای کد استفاده نشود و...

    تعریف متغیر هم با کلاسس هم کلاَ مانعی ندارد. Dim Point As System.Drawing.Point

  12. #132
    دستور پیش پردازنده Option Strict On برای همین منظور است و من خودم به شخصه در تنظیمان خود محیط VS آن را به ON تنظیم کرده ام، با اینکار VB هم به همان اندازه #C لجباز میشود و کوچکترین تبدیلات را هم انجام نمیدهد و باید تبدیلات را صراحتاً انجام داد.
    Stricit???????????!!!!!!!!!!!!!!!!!!!!!!!!!!!!


    منظورم این بود :
    کد:
    Point point = new Point(0,0);
    حالا وی بی حساس به شکل حروف نیست. برنامه نویسان این زبان چیز زیادی از دست دادند؟؟
    نامگذاری به این شکل درسته؟؟ چقدر از این روش استفاده می کنید؟؟؟
    چرا مایکروسافت این روش مبهم نامگذاری رو مذمت کرده؟؟


    منظور گرفتن خطا پس از Enter یا ... نیست. منظور کنترل Catch برای متغیرهائیست که هنوز مقداری نگرفته اند یا ...
    مثالی در این رابطه بزن که در وی بی عملی نباشه!



    لطفا بیشتر توضیح بدید...
    هر دو زبان در مواردی کار هایی رو ساده تر از دیگر انجام میدن. مثل فضای نامی My که از قابلیت های تمرکز یافته در اون (که بر مبنای کلاس ها و متد های چهار چوب دات نت بنا شدند) اطلاع دارید

  13. #133
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    دوست عزیز linux، در مورد استفاده از & vbCrLf و اون دستور Select Case، رفع ابهام شد... ممنونم :) در ضمن پست مربوط به مقایسه هم ویرایش کردم.




    برای تعریف متغیر های هم نام ولی با تفاوت حروف بزرگ و کوچک از [] می توانید استفاده کنید
    نکته جالبی بود... بعد برای استفاده از شئ ایجاد شده، باید به شکل زیر استفاده کرد ؟ :

    point.X

    حالا اگر من بخوام به کلاس اصلی یعنی Point دسترسی داشته باشم باید بنویسم System.Drawing.Point ؟ به نظر شما استفاده از [] کدنویسی رو سخت نمیکنه؟ یا روش بهتری برای دسترسی به Point هست؟!




    نقل قول نوشته شده توسط BlackDal
    مثالی در این رابطه بزن که در وی بی عملی نباشه!
    جناب BlackDal و __H2__ عزیز، اون مورد Catch رو هم تصحیح کردم... (پست 45 ویرایش شد)
    این مورد Catch رو از یک متن انگلیسی خونده بودم، حالا مثل اینکه متن اون مطلب قدیمی یا نادرست بوده!




    حالا وی بی حساس به شکل حروف نیست. برنامه نویسان این زبان چیز زیادی از دست دادند؟؟
    این مورد یک عیب و یک مزیت داره... حالا نمیدونم عیبش بیشتره یا مزیتش!




    دستور پیش پردازنده Option Strict On برای همین منظور است و من خودم به شخصه در تنظیمان خود محیط VS آن را به ON تنظیم کرده ام، با اینکار VB هم به همان اندازه #C لجباز میشود و کوچکترین تبدیلات را هم انجام نمیدهد و باید تبدیلات را صراحتاً انجام داد.
    این مورد رو که از جلوی بیسیک.نت برداشته بودم :) ولی هنوز جلوی سی# مونده!
    برای اینکه مشکلی پیش نیاد، اون رو از جلوی سی# هم بر میدارم :)




    برای اینکه مشکلی برای بعد پیش نیاد ( و مباحث زیاد تو در تو نشه ) همون مطلب پست شماره 45 ( از همین تاپیک ) که مربوط به مقایسه بین سی# و بیسیک.نت بود، بر اساس توضیحات دوستان، ویرایش شد. لطفا یک نگاه مجدد به همون پست بندازید...


    با تشکر فراوان از دوستان...
    اگر مورد دیگه ای بود، خوشحال میشم عنوان کنید :) ( چه در باب عیب و چه مزیت ! )

  14. #134
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    نقل قول نوشته شده توسط BlackDal
    مثل فضای نامی My
    پس از اضافه کردن Reference، تا حدود زیادی از کلاسهای فضای نام My قابل استفاده در سی# هست... مثلا :

    Microsoft.VisualBasic.Devices.Computer my = new Computer();
    my.FileSystem.CopyDirectory( @"C:\A", @"D:\A" );

  15. #135
    کاربر دائمی آواتار linux
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    پست
    2,313
    [quote=PC2st.ir;338471]دوست عزیز linux، در مورد استفاده از & vbCrLf و اون دستور Select Case، رفع ابهام شد... ممنونم :) در ضمن پست مربوط به مقایسه هم ویرایش کردم.

    نکته جالبی بود... بعد برای استفاده از شئ ایجاد شده، باید به شکل زیر استفاده کرد ؟ :

    point.X

    حالا اگر من بخوام به کلاس اصلی یعنی Point دسترسی داشته باشم باید بنویسم System.Drawing.Point ؟ به نظر شما استفاده از [] کدنویسی رو سخت نمیکنه؟ یا روش بهتری برای دسترسی به Point هست؟!
    quote]
    باید بعد از تعریف بصورت [point].x استفاده کنید. قطعا سخت تر می شه ولی من هیچ وقت از این روش استفاده نخواهم کرد
    در کلاس های برای فیلد ها از _ قبل از اسم و برای پروپرتی بدون _ استفاده می کنم
    در داخل برنامه هام هیچ وقت نام یک متغیر را همسان نام کلاس نمی گیرم
    چیز که من استفاده خواهد کرد شبیه این خواهد بود
    dim pntStart as point

  16. #136
    مدت ها بود که به این فروم سر نزده بودم و حالا که حجم پست ها و مطالب پر بارش رو می بینم خیلی خوشالم!
    این اولین پست من در این جاست و می خوام مطلبی رو که اینجا مطرح شده از یه زاویه دیگه ببینم و خوشحال میشم نظر دوستان رو داشته باشم.
    تو این چند سالی که مشغول کار با دات نت بودم با شاگرد ها و همکارای زیادی کارکردم و پروژه های زیادی رو مدیریت کردم. از پروژه های 1000 خطی ساده گرفته تا برنامه های بسیار سنگین. مطلبی که در مورد vb و #c نظرم رو جلب کرد این بود : زمان اجرای پروژه!
    حالا این یعنی چه؟!
    افراد برای یادگیری #C وفت بیشتری صرف می کنن
    کد نویس های #C زمان بیشتری رو صرف کد نویسی می کنن
    و از همه مهمتر و قابل توجه تر زمانی هست که افراد صرف دیباگ می کنن که حداقل در مورد کارهای من خیلی مشکل ساز بود
    البته برای اینکه ذهن دوستان روشن بشه باید بگم که روش کار و کد نویسی تمام این دوستان منطبق بر مسایل اجرایی OOP بود و زمان هیچ ربطی به کد نویسی اسپاگتی نداشت.
    به هر حال این فقط مشاهدات شخصی من بود و خیلی دلایل مستندی برای این مطالب در اختیار ندارم ولی مطمئنا هر وقت قصد استخدام برنامه نویس داشته باشم حتما یک VB کار برام ارجحیت داره.

  17. #137
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    در مورد کد زیر در بیسیک.نت:

    Dim A = 0, B As Byte

    در مورد کد بالا، همونطور که من یک اشتباه رو انجام دادم، بدون اینکه کامپایلر بیسیک.نت به من اخطاری بده، شی رو از نوع object تعریف کرد! در صورتی که در سی# باید نوع object به صراحت ذکر بشه و برنامه نویس از این موضوع مطلع بشه تا اگر سهوا کار اشتباهی در سی#، انجام شده، به سرعت پی گیری بشه تا تاثیر نامطلوبی روی برنامه نگذاره.

    به نظر شما دوستان، این مورد یک مزیت است یا یک عیب؟

  18. #138
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    نقل قول نوشته شده توسط benyblack مشاهده تاپیک
    مدت ها بود که به این فروم سر نزده بودم و حالا که حجم پست ها و مطالب پر بارش رو می بینم خیلی خوشالم!
    این اولین پست من در این جاست و می خوام مطلبی رو که اینجا مطرح شده از یه زاویه دیگه ببینم و خوشحال میشم نظر دوستان رو داشته باشم.
    تو این چند سالی که مشغول کار با دات نت بودم با شاگرد ها و همکارای زیادی کارکردم و پروژه های زیادی رو مدیریت کردم. از پروژه های 1000 خطی ساده گرفته تا برنامه های بسیار سنگین. مطلبی که در مورد vb و #c نظرم رو جلب کرد این بود : زمان اجرای پروژه!
    حالا این یعنی چه؟!
    افراد برای یادگیری #C وفت بیشتری صرف می کنن
    کد نویس های #C زمان بیشتری رو صرف کد نویسی می کنن
    و از همه مهمتر و قابل توجه تر زمانی هست که افراد صرف دیباگ می کنن که حداقل در مورد کارهای من خیلی مشکل ساز بود
    البته برای اینکه ذهن دوستان روشن بشه باید بگم که روش کار و کد نویسی تمام این دوستان منطبق بر مسایل اجرایی OOP بود و زمان هیچ ربطی به کد نویسی اسپاگتی نداشت.
    به هر حال این فقط مشاهدات شخصی من بود و خیلی دلایل مستندی برای این مطالب در اختیار ندارم ولی مطمئنا هر وقت قصد استخدام برنامه نویس داشته باشم حتما یک VB کار برام ارجحیت داره.
    فکر کنم بد نباشه که بدونید :

    کتابخانه NET Framework. رو با سی# نوشتند...
    Runtime های اون رو هم با سی++ نوشتند...


    منبع : در گوگل تمام عبارت
    "NET Framework written in C#‎"
    رو سرچ کنید :)

  19. #139
    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    در مورد کد زیر در بیسیک.نت:

    Dim A = 0, B As Byte

    در مورد کد بالا، همونطور که من یک اشتباه رو انجام دادم، بدون اینکه کامپایلر بیسیک.نت به من اخطاری بده، شی رو از نوع object تعریف کرد! در صورتی که در سی# باید نوع object به صراحت ذکر بشه و برنامه نویس از این موضوع مطلع بشه تا اگر سهوا کار اشتباهی در سی#، انجام شده، به سرعت پی گیری بشه تا تاثیر نامطلوبی روی برنامه نگذاره.

    به نظر شما دوستان، این مورد یک مزیت است یا یک عیب؟
    این مورد که نقص حساب نمیشه ، ماهیت زبان بیسیک از ابتدا همین بوده! اگر قرار باشه کلا این دو زبان برابر بشن دیگه این راحتی که در وی بی هست وجود نداره ، بنابراین اصلا لزومی نداره این دو تا دقیقا مثل هم بشن!
    این طوری که دارید مقایسه میکنید 4 روز دیگه حتما میگید چرا مثلا قدرت پردازش آرایه ها در وی بی یا سی شارپ به اندازه مطلب نیست یا چرا قدرت پردازش لیستش به اندازه لیسپ نیست و ....

    مثلا در خیلی از موارد در ++C باید برنامه نویس تاثیر واقعی کد رو بدونه چون چیزی که میبینه دقیقا چیزی نیست که انتظار داره ، حالا باید بگیم این یک نقصه ؟

    فکر کنم بد نباشه که بدونید :
    کتابخانه NET Framework. رو با سی# نوشتند...
    Runtime های اون رو هم با سی++ نوشتند...
    اینم هیچی رو ثابت نمیکنه!

    به نظر من بیخودی بحث رو طولانی نکنید ، چون به هیچ جایی نمیرسید ، در سایت های غیر ایرانی هم که بعضی برنامه نویسان حرفه ای مطلب نوشتن هیچ کدام هیچ یک از این دو زبان رو نفی نکرده ، چون هر کدوم کاربرد خودش رو داره!

    در این که سی شارپ برنامه نویس رو مجبور میکنه حتما بعضی کارها رو بفهمه و بعد انجام بده شکی نیست ، کسانی که در برنامه نویسی سرشون به تنشون میارزه قبل از کد نویسی دانشی که پشت این کدها هست رو فهمیدن بعدش کد می نویسند بنابراین اگر با وی بی کد بنویسند حتما از خیلی از سی شارپ کارها کدهای مطمئن تر کاراتر و موثرتری خواهند نوشت!

  20. #140
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    نقل قول نوشته شده توسط arsp_2004
    اینم هیچی رو ثابت نمیکنه!
    این مورد رو در جواب benyblack گفتم و ربطی به مقایسه نداشت، برای اطلاع رسانی بود که:
    اگر ایشون VB.NET براش ارجحیت داره، از نظر مایکروسافت در اون مورد خاص (.NET Framework Library)، سی# ارجحیت دازه!



    نقل قول نوشته شده توسط arsp_2004
    این مورد که نقص حساب نمیشه ، ماهیت زبان بیسیک از ابتدا همین بوده!
    درسته، قبول دارم...
    نمیشه گفت که همش عیب هست یا مزیت...
    تا حدودی عیب داره و تا حدودی هم مزیت...
    وقتی عیب و مزیت گفته بشه، اون وقت ماهیت و کاربردشون و غیره، مشخص میشه.

    که بنظرم، عیبش اینه که گفتم، یعنی :
    نقل قول نوشته شده توسط PC2st.ir
    همونطور که من یک اشتباه رو انجام دادم، بدون اینکه کامپایلر بیسیک.نت به من اخطاری بده، شی رو از نوع object تعریف کرد! در صورتی که در سی# باید نوع object به صراحت ذکر بشه و برنامه نویس از این موضوع مطلع بشه تا اگر سهوا کار اشتباهی در سی#، انجام شده، به سرعت پی گیری بشه تا تاثیر نامطلوبی روی برنامه نگذاره.
    و فکر کنم شما مزیتش رو گفتید، یعنی :
    نقل قول نوشته شده توسط arsp_2004
    ماهیت زبان بیسیک از ابتدا همین بوده! اگر قرار باشه کلا این دو زبان برابر بشن دیگه این راحتی که در وی بی هست وجود نداره



    نقل قول نوشته شده توسط arsp_2004
    بنابراین اصلا لزومی نداره این دو تا دقیقا مثل هم بشن!
    درسته، لزومی نداره مثل هم باشند و به قول شما اصلا ماهیتشون فرق میکنه، که با پی گیری این بحث ها، میشه تفاوتشون رو پیدا کرد.
    راستی بد نیست در مورد شباهتها هم بگیم :)



    بنابراین اگر با وی بی کد بنویسند حتما از خیلی از سی شارپ کارها کدهای مطمئن تر کاراتر و موثرتری خواهند نوشت!
    فکر نمیکنم حتما اینطوری باشه... این نظر شماست و قابل احترامه :)

  21. #141
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    میدونم که معمولا پروژه های بزرگ رو که به چندین قسمت تقسیم کردند (مانند کلاسها و لایه ها و ...)، هر قسمت میتونه با یک زبان از زبانهای .net نوشته بشه (همچنین سی++ مدیریت نشده) و مسئله نوع زبان مطرح نیست!
    و از اینکه مقایسه صورت میگیره، برای اینه که با توجه به مشخصات هر زبان، برنامه نویس یکیش رو انتخاب میکنه و مزایا و معایت هر زبان رو میبینه و تشخیص میده که مزایا براش مهمتره یا معایب.

  22. #142
    کتابخانه NET Framework. رو با سی# نوشتند...
    چه ربطی به سی شارپ دات نت داره؟؟؟؟
    کتابخانه های دات نت رو نمیشه با زبان هایی که از همون کتابخانه ها استفاده می کنند نوشت!



    منبع : در گوگل تمام عبارت "NET Framework written in C#‎" رو سرچ کنید :)
    زحمتشو خودت بکش. یه لینک هم به ما بده!

  23. #143
    کاربر دائمی آواتار linux
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    پست
    2,313
    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    در مورد کد زیر در بیسیک.نت:

    Dim A = 0, B As Byte

    در مورد کد بالا، همونطور که من یک اشتباه رو انجام دادم، بدون اینکه کامپایلر بیسیک.نت به من اخطاری بده، شی رو از نوع object تعریف کرد! در صورتی که در سی# باید نوع object به صراحت ذکر بشه و برنامه نویس از این موضوع مطلع بشه تا اگر سهوا کار اشتباهی در سی#، انجام شده، به سرعت پی گیری بشه تا تاثیر نامطلوبی روی برنامه نگذاره.
    به نظر شما دوستان، این مورد یک مزیت است یا یک عیب؟
    تا وقتی شما از قسمت myproject ---> compiler تنظیمات را تغیر ندهید ویژوال بیسیک این خطا ها را چشم پوشی می کند این سه قسمت را به warrning تغییر بدهید ویژوال بیسیک هم خطا خواهد گرفت



    مشکل اینجاست که شما این را تاحالا نمی دانستید.
    برای دستور dim اینجوری باید عمل کنید

    Dim
    a AsInteger = 0, b AsLong, d AsDate = DateTime.Now, e AsString = "Start", o AsObject

    یعنی در یک خط استفاده از دستور dim شما همه جور متغییری می توانید تعریف کنید.
    بر خلاف سی شارپ که وقتی اعلام کردید فقط از همان نوع متغیر ساخته میشه
    بعضی وقت ها مشکل از اینکه ما درست بلد نیستیم

  24. #144
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    نقل قول نوشته شده توسط BlackDal
    زحمتشو خودت بکش. یه لینک هم به ما بده!
    1. http://www.google.com/search?num=50&...ten+in+C%23%22
    2. http://www.ureader.com/message/1773149.aspx

  25. #145
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    نقل قول نوشته شده توسط linux
    برای دستور dim اینجوری باید عمل کنید
    بعد از اون اشتباه قبلی، قهمیدم که باید چطور استفاده بشه :)



    نقل قول نوشته شده توسط linux
    این سه قسمت را به warrning تغییر بدهید ویژوال بیسیک هم خطا خواهد گرفت
    هنوز این مورد رو در قسمت مقایسه ها قرار نداده بودم و با توجه به این نکته، پس لازم نیست این مورد اضافه بشه :) از توضیج ممنونم...



    نقل قول نوشته شده توسط linux
    بعضی وقت ها مشکل از اینکه ما درست بلد نیستیم
    اینجور بحث هاست که باعث میشه سوء تفاهم ها و ندانستنی ها، برطرف بشه :) تا بحث به یک نتیجه شفاف برسه!
    این مواردی که شما در این پست یا پستهای قبلی گفتید، در بیسیک.نت 2003 هم وجود داشت ؟

  26. #146
    کاربر دائمی آواتار linux
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    تهران
    پست
    2,313
    من با بیسیک 2003 کار نکردم

  27. #147
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    آقایان، علما، فضلا .... !!! این بحث داره زیادی بیهوده میشه! در همین سایت در تاپیکی دیگر نیز این بحث ادامه داشت و آخر هم به نتیجه مشخصی نرسید. همان طور که کاربر arsp_2004 هم اشاره کردند، هیچ فایده ای ندارد!
    مطمئناً به جای نمیرسید، حالا که دوستان از هر دو طرف هستند دیگر فایده ای ندارد! هر طرف ابهامی را مطرح کند (که به نظر من ناشی از بی اطلاعای از امکانات زبان مقابل است) فوراً دوستان مثال نقضش را می آورند.

    به قول کاربر BlackDal تفاوت هایی وجود دارد ولی برتری نه! (گرچه که همچنان به نظر من تفاوت فاهشی وجود به جز سینتکس خاص هر زبان وجود ندارد!)

    سند انتهای پست 42 هم روشن است.

    البته ما همچنان میمانیم و به ابهامات احتمالی پاسخ میدهیم ولی چه خوب که دیگر ابهامی مطرح نشود!!!

    موفق و پیروز باشید.

  28. #148

  29. #149
    بابا چرا انقدر با هم دعوا میکنید ...
    نکته جالب اینکه نویسنده Delphi (الکساندر هلزبرگ) که سالها کارمند بورلند بود توسط مایکروسافت برای خلق C#‎ از بورلند خریده شد.
    الکس جون هم برای خلق C#‎ قدرت C و سادگی Delphi و نه Basic رو در نظر گرفت، چون سادگی بیش از حد VB باعث ضعف هایی هم شده، بنابراین اون بیشتر Delphi رو الگوی ساخت C#‎ قرار داد.

  30. #150
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    نقل قول نوشته شده توسط BlackDal
    اگه متوجه نشدی به جای #C بنویس C#‎.NET
    برای جستجو در گوگل، هر چه جستجو محدودتر بشه، احتمال یافتن مطالب مورد نظر هم کمتر میشه، حالا من دات نت اضافه کنم، دیگه محدودیت خیلی رفته بالا !!! چون اگر خوب دقت کرده باشید، کمتر جائی می بینید که نوشته بشه C#‎.NET و معمولا واژه C#‎ یا CSharp به کار برده میشه... دلیل اینکه مینویسند VB.NET بخاطر اینه که بیسیک قبل و بعد از دات نت، ماهیت های متفاوتی دارند :) ( تفاوتی مثل بادام زمینی و بادام هندی! )


    دوست عزیز، تا اونجائی که فهمیدم، runtime هاش با سی++ نوشته شده و کلاسهاش با سی# ... یعنی اینکه به کمک زبان سی# و Runtime ها، کتابخانه دات نت نوشته شده ...
    سی# یک زبان هست و لازم نیست که حتما از کتابخانه دات نت استفاده کنه، با توجه به اینکه دات نت فقط به همون کتابخانه محدود نمیشه و متشکل از قسمتهای دیگری ( از جمله Runtime ) هم هست :)


    البته ناراحت نباشید :) یک جائی خونده بودم که کلاسهای داخل فضای نام My در بیسیک.نت، به کمک خود بیسیک.نت نوشته شده ! و این به دلیل سازگاری بیشتر با بیسیک.نت و استفاده از متدهائی با پارامترهای اختیاری است. ( منبعی براش ندارم، مقبولیتش با خودتون! )

  31. #151
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    نقل قول نوشته شده توسط __H2__
    این بحث داره زیادی بیهوده میشه!
    به نظرم برعکس! بیهوده نمیشه...


    بد نیست یک چیزی گفته بشه :
    اگر بحث رو از اول تا حالا، مرور کرده باشید، متوجه شدید که در اوایل تاپیک، گفتم که مثلا بیسیک.نت بدرد فلان میخوره و سی# بدرد فلان میخوره. به این ترتیب و با این شیوه، مطلبی در همین تاپیک قرار داده بودم، ... بعدش با کمی صحبت با titbasoft متوجه شدم که به این ترتیب بحث منحرف خواهد شد... ولی بعدش که بحث خودش ادامه پیدا کرد، بهتر دیدم که مثل بعضی از این سایتهای خارجی، مزایای یک زبان برنامه نویسی گفته بشه با این تفاوت که معایب اون مزیت هم تا حد ممکن گفته بشه. و بنظرم با این سبک، بحث نه تنها منحرف و بیهوده نمیشه، بلکه به یک نتیجه روشن هم خواهد رسید. با توجه به اینکه با بوجود آمدن بیسیک.نت، دیگر هیچ زبانی بد نیست و برای انجام یک پروژه خاص، تشخیص بهتر یا بد تر بودن بر اساس مشخصاتشون، به عهده خود خواننده خواهد بود.



    نقل قول نوشته شده توسط __H2__
    هر طرف ابهامی را مطرح کند (که به نظر من ناشی از بی اطلاعای از امکانات زبان مقابل است) فوراً دوستان مثال نقضش را می آورند.
    بد نیست یک توضیح هم در رابطه با این بگم تا سوء تفاهم ها از بین بره :
    اولین بار که لیست مربوط به تفاوتها رو نوشته بودم، همش رو از یک سایت به زبان انگلیسی برداشته بودم، مواردی مثل استفاده از += برای شکستن خطوط در بیسیک.نت و نداشتن XML Comments ( که جناب linux توضیحات مربوطه رو اعلام داشتند ) و همچنین Catch کردن Error های بیشتر در سی#، همه اینها رو از یک سایت انگلیسی برداشته بودم که گویا به احتمال زیاد اون مطالب قدیمی بوده و برای مقایسه با VB.NET 2003 بکار رفته که به تبع، هم اکنون VB.NET 2005 موجود است که اون موارد رو اصلاح کرده است.

    پس این از این ! اما برای مطلبی که در مورد Select Case گفته شد، قبول دارم یک اشتباه شخصی بخاطر نحوه کد نویسی بود ( به همین خاطر پوزش من رو پذیرا باشید )... که در ادامه آن و گفتگو با linux مشخص شد که مورد اشتباه در نحوه کد نویسی بوده... بعد از اون به ذهنم رسید که اگر این چنین است، پس یعنی VB.NET به این نوع اشتباهات پای بند نیست ؟! پس این مورد رو در همین تاپیک نوشتم تا ببینم جوابش چیه ! که با جواب جناب linux متوجه شدم، میشه به کمک تنظیمات Compile مشکل رو حل کرد.
    پس با توجه به این مطالب، سعی کردم تا حالا ابهامات نباشه و از یک منبع بخصوص باشه، به جز همون Select Case که در ادامه اون، مطلب دیگری عنوان شد.


    اگر هم ابهاماتی بود، برطرف شده که برطرف شدن اینها به شفاف سازی و در آخر هم یک نتیجه شفاف و شاید نه خیلی دقیق (!) می انجامه.


    در هر صورت سعی میکنم که لیست تفاوتها و شباهت نوشته بشه ( حالا یا من مینویسم یا شما، فرقی نمیکنه ) تا جائی برای کل کل و ... نباشه. در هر صورت، فعلا این لیست در پست شماره 45 از همین تاپیک قرار داره و میشه بهش مراجعه کرد. ( لیست تفاوتها هم آپدیت شده )
    آخرین ویرایش به وسیله PC2st : شنبه 22 اردیبهشت 1386 در 17:36 عصر دلیل: افزودن لینک

  32. #152
    برای جستجو در گوگل، هر چه جستجو محدودتر بشه، احتمال یافتن مطالب مورد نظر هم کمتر میشه، حالا من دات نت اضافه کنم، دیگه محدودیت خیلی رفته بالا !!! چون اگر خوب دقت کرده باشید، کمتر جائی می بینید که نوشته بشه C#‎.NET و معمولا واژه C#‎ یا CSharp به کار برده میشه... دلیل اینکه مینویسند VB.NET بخاطر اینه که بیسیک قبل و بعد از دات نت، ماهیت های متفاوتی دارند :) ( تفاوتی مثل بادام زمینی و بادام هندی! )
    دقیقاً، جالبه بدونید تقاوت #C و C#‎.NET هم به همین اندازست!


    بابا چرا انقدر با هم دعوا میکنید ...
    نکته جالب اینکه نویسنده Delphi (الکساندر هلزبرگ) که سالها کارمند بورلند بود توسط مایکروسافت برای خلق C#‎ از بورلند خریده شد.
    الکس جون هم برای خلق C#‎ قدرت C و سادگی Delphi و نه Basic رو در نظر گرفت، چون سادگی بیش از حد VB باعث ضعف هایی هم شده، بنابراین اون بیشتر Delphi رو الگوی ساخت C#‎ قرار داد.
    اندرو هلزبرگ (Anders Hejlsberg) به منظور تدوین چهارچوبی که به نام دات نت می شناسید به مایکروسافت رفت، نه فقط سی شارپ!!!

  33. #153
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    دقیقاً، جالبه بدونید تقاوت #C و C#‎.NET هم به همین اندازست!
    فکر نمیکنم سنتکس برنامه نویسی در سی# با C#‎.NET فرقی داشته باشه !!! :)
    به همین خاطر، معمولا در بحثها و مطالب میگن سی# نه C#‎.NET

  34. #154
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    میخواستم ببینم که مشابه کلمات checked و unchecked در بیسیک.نت چیه؟
    نتونستم چیزی پیدا کنم، این مورد برای کنترل روی OverflowException هست.

  35. #155
    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    فکر نمیکنم سنتکس برنامه نویسی در سی# با C#‎.NET فرقی داشته باشه !!! :)
    به همین خاطر، معمولا در بحثها و مطالب میگن سی# نه C#‎.NET
    تفاوت سینتکس #C و C#‎.NET به اندازه تفاوت VB و VB.NET است. این دو یک زبان نیستند!!!من نمی دونم شما چند تا مطلب سنگین خوندید که به جای #c نوشته بود C#‎.NET (با کمال احترام البته)
    اولین بار که لیست مربوط به تفاوتها رو نوشته بودم، همش رو از یک سایت به زبان انگلیسی برداشته بودم، مواردی مثل استفاده از += برای شکستن خطوط در بیسیک.نت و نداشتن XML Comments ( که جناب linux توضیحات مربوطه رو اعلام داشتند ) و همچنین Catch کردن Error های بیشتر در سی#، همه اینها رو از یک سایت انگلیسی برداشته بودم که گویا به احتمال زیاد اون مطالب قدیمی بوده و برای مقایسه با VB.NET 2003 بکار رفته که به تبع، هم اکنون VB.NET 2005 موجود است که اون موارد رو اصلاح کرده است.
    لطف کن و فقط مطالب مستدلی رو که ناشی از اطلاعات خودته اینجا ذکر کن، نه نقل قول

  36. #156
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    تفاوت سینتکس #C و C#‎.NET به اندازه تفاوت VB و VB.NET است. این دو یک زبان نیستند!!!
    میشه تفاوتشون رو ذکر کنید؟

    من نمی دونم شما چند تا مطلب سنگین خوندید که به جای #c نوشته بود C#‎.NET (با کمال احترام البته)
    مطالبی که مربوط به ویژوال سی# 2005 باشه :)

  37. #157
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    برای اینکه بیشتر سر این موضوع بحث نکنیم، مطلب زیر رو از MSDN گرفتم :

    Why C#‎ and Visual Basic .NET?

    Why, if .NET supports 20 or so languages, will all of Dr. GUI's columns about .NET use only C#‎ and Visual Basic .NET? Well, at first the beta versions of the Dr. GUI .NET columns were using only C#‎. At the time the good doctor started the column, C#‎ was the obvious choice. Here's why: Much of the .NET Framework is written in C#‎, so most of the early examples were also in C#‎. It just seemed like the obvious way to go at the time. (Don't forget that Dr. GUI is a C++‎ kinda guy, too.)

    But nowadays, Visual Basic .NET is almost every bit as powerful as C#‎ (there are some features in each that aren't in the other), so it's an equally good choice for .NET programming—and today it's obvious that Dr. GUI .NET should use both languages. Thus, the good doctor (with the help of Duncan Mackenzie, author of Coding4Fun—thanks, Duncan!) has both C#‎ and Visual Basic .NET samples in the columns.


    لینک منبع و البته توضیحات بیشتر :
    http://msdn2.microsoft.com/en-us/library/aa302304.aspx

    به اون جمله قرمز و پر رنگ شده توجه کنید. برداشت شما از مطلب فوق چیه؟
    توجه شما رو به این نکته جلب میکنم که سی# در کنار بیسیک.نت اومده و یک مقایسه کوچولو صورت گرفته :)

  38. #158
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    بد نیست یک توضیح هم در رابطه با این بگم تا سوء تفاهم ها از بین بره :
    اولین بار که لیست مربوط به تفاوتها رو نوشته بودم، همش رو از یک سایت به زبان انگلیسی برداشته بودم، مواردی مثل استفاده از += برای شکستن خطوط در بیسیک.نت ... همه اینها رو از یک سایت انگلیسی برداشته بودم که گویا به احتمال زیاد اون مطالب قدیمی بوده و برای مقایسه با VB.NET 2003 بکار رفته که به تبع، هم اکنون VB.NET 2005 موجود است که اون موارد رو اصلاح کرده است.
    سلام
    همین مسئله اثبات میکنه که صرف خارجی بودن منبع دلیل بر موجه و بی نقص بودن آن نیست، چون این روش تا آنجایی که من یادم می آید وجود داشته و ربطی به VB2005 ندارد، یعنی نگارنده اصلی که خارجی هم بوده حتی اصول ابدایی Basic را هم بلد نبوده و باز به خودش اجازه همچین مقایسه ای داده!



    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    Much of the .NET Framework is written in C#‎
    همانطور که دوستان هم گفتند، این به هیچ وجه اثبات قدرت نیست! کلاسهای فریم وروک را با هر کدام از زبان های تحت دات نت میتوان نوشت و در همه زبانهای دیگر استفاده کرد.

    راستی من جدیداً کاری در #C انجام میدادم به دو مشکل برخوردم! شاید تاپیکی جدید میزدم بهتر بود! یکی شان طولانی است و حتماً باید تاپیکی در این مورد بزنم ولی یک مورد ساده است و شاید دوستان #C سریعاً جوابش را بدهند (ولبته بی ربط به تاپیک فوق هم نیست!).
    معادل کلمه کلیدی Me و MyBase را در #C بلدم، ولی معادل MyClass چیست ؟؟؟؟؟؟؟

  39. #159
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    39
    پست
    1,491
    معادل کلمه کلیدی Me و MyBase را در #C بلدم، ولی معادل MyClass چیست ؟؟؟؟؟؟؟
    کد زیر رو در بیسیک.نت میشه به کمک کلمه کلیدی MyClass اجرا کرد تا با override شدن متد MyMethod، باز هم همون MyMethod کلاس والد، از طریق متد DoWork اجرا بشه.

    Public Class ClassA
    Public Overridable Sub MyMethod()
    MessageBox.Show( "Base" )
    End Sub
    Public Sub DoWork()
    MyClass.MyMethod()
    End Sub
    End Class
    Public Class ClassB : Inherits ClassA
    Public Overrides Sub MyMethod()
    MessageBox.Show( "child" )
    End Sub
    End Class


    در سی# هم میتونیم متد MyMethod رو بصورت virtual تعریف نکنیم تا override نشه... دقیقا مثل همون کد بیسیک.نت عمل میکنه، بدون کوچکترین تفاوتی! اگر شک داشتین، کد IL اش رو مرور کنین.

    public class ClassA
    {
    public void MyMethod()
    {
    MessageBox.Show( "Base" );
    }
    public void DoWork()
    {
    this.MyMethod();
    }
    }
    public class ClassB : ClassA
    {
    public void MyMethod()
    {
    MessageBox.Show( "Child" );
    }
    }


    با صدا زدن متد DoWork از شئ ایجاد شده از کلاس ClassB، خواهیم دید که هر دو کد یک نتیجه رو پس خواهند داد و متد MyMethod از کلاس ClassB ( که override هم شده )، صدا زده نمیشود.

    پس تفاوتشون فقط به وجود یک کلمه اضافی به نام MyClass برمیگرده!

    از دوستان کسی جواب اون سوال کلمات کلیدی checked و unchecked رو نداد! پس به نظرم چنین چیزی در بیسیک.نت وجود نداره...

  40. #160
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام
    دوست عزیز این که نشد راه حل!!!!!!!!!!!!!!!!!!
    فقدان کلمه کلیدی MyClass چیزی در حد فقدان base است. این یک جنبه قدرتمند در پیاده سازی های OOP و قدرت در پیاده سازی های وراثتی است.
    حسن MyClass در آن است که با وجودی که متد قابل Override است (میتوان /ان را در مشتقات باز تعریف کرد.) میتواند در کلاسس جاری Override را در نظر نگیرد. حتماً باید معادلی در #C داشته باشد!؟!؟!؟! قابلیت MyClass یک قابلیت بی نظیر در طراحی های قدرتمند OOP است و با چیزهای درپیتی مثل With و... قابل قیاس هم نیست.
    مثل این است که بگوییم (زبانم لال) #C کلمه override را ندارد، و درز جواب بگوییم خوب نیازی نیست هیچ متدی را override نمیکنیم !!!!!!!!!!!!!!!!!!!!!!!؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟

    راستی برای مشکل دوم هم در #C تاپیکی زدم، دوستان نظری بیاندازند!

صفحه 4 از 6 اولاول ... 23456 آخرآخر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •