صفحه 5 از 6 اولاول ... 3456 آخرآخر
نمایش نتایج 161 تا 200 از 202

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

  1. #161
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    فقدان کلمه کلیدی MyClass چیزی در حد فقدان base است. این یک جنبه قدرتمند در پیاده سازی های OOP و قدرت در پیاده سازی های وراثتی است.
    دیگه چه خبر!؟... :) بابا این قدر مزیت بزرگی هم نیست!!!


    مثل این است که بگوییم (زبانم لال) #C کلمه override را ندارد، و درز جواب بگوییم خوب نیازی نیست هیچ متدی را override نمیکنیم !!!!!!!!!!!!!!!!!!!!!!!؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟
    آخرش بیسیک.نت کار خودش رو کرد! :)

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

    بهر حال نمیشه زیرش زد! این مورد در بیسیک.نت هست و در سی# نیست! :)
    به زودی این مورد و دیگر موارد رو بصورت خیلی مرتب، بصورت یک مقایسه در کنار هم میگذارم ( بدون گفتن عیب و مزیت! و فقط توضیح در رابطه با اونها! )

  2. #162
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام علیکم به برادران ارجمند!
    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    در نهایت به یک نتیجه ای رسیدم که:
    واقعا لازم نیست که چنین موردی ( MyClass ) وجود داشته باشه!
    چون راه حل های بهتری به جای استفاده از MyClass، وجود داره.
    دست شما درد نکنه! لطف کردید! یکی از کلمات کلیدی اصلی VB برای پیاده سازی های OOP به همین راحتی کشک شد!!!!!!!!!

    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    بهر حال نمیشه زیرش زد! این مورد در بیسیک.نت هست و در سی# نیست! :)
    من همچنان امیدوار به راه حلی در #C هستم، چون قبول فقدان آن در #C برایم کمی سخت است.

  3. #163
    توجه شما رو به این نکته جلب میکنم که سی# در کنار بیسیک.نت اومده و یک مقایسه کوچولو صورت گرفته :)
    هر چیزی که با یکی از زبان های دات نت مقایسه میشه الزاماً باید از سکوی دات نت باشه
    در لینک زیر #C با C#‎.NET مقایسه شده. باید نتیجه بگیریم این دو یکی هستند؟؟
    http://www.experts-exchange.com/Prog..._21827745.html


    ظاهراً این بحث مسیر درستی پیدا نخواهد کرد
    بهتره تمومش کنیم!

  4. #164
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    نقل قول نوشته شده توسط __H2__ مشاهده تاپیک
    قابلیت Iterators چیزی بجز پشتیبانی راحت از رابطهای IEnumerator و IEnumerable نیست (و البته دوقولوهای Generic شان).

    //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

    همان طور که Form1.Show کد نویسی را کم میکند، yield هم کد نویسی را کم میکند و همان طور که دستور کثیف Form1.Show یک VB کار تازه کار را از فهم عمیق و درک کامل اعمالی که در پسضمینه انجام میشود دور میکند، دستور غیر کثیف yield هم همین بلا را بر سر #C کارهای غیر تمام حرفه ای در می آورد! میدانید چرا؟ مطمئناً و بدن شک بیش از 85 درصدر #C کارهای همینجا نمیدانند و yield را معجزه #C و چیز عجیب و خارق العاده ای تصور میکنند ولی در زیر ساخت همان کاری انجام میشود که من در نمونه کد اول با VB.Net انجام دادم (البته با الگوریتمی متفاوت)، و یک کلاسس کمکی توسط #C ساخته میشود که دو رابط فوق را تعریف میکند.
    سلام به دوستان عزیز!
    گفتم هر دو کد فوق را که کاملاً یکسان عمل میکنند از نظر کد تولیدی IL مقایسه کنم.
    نتیجه اش جالب بود! کد اول که با #C بود و خیلی هم کم بود و با قابلیت Iterators صورت گرفته بود با وجود کوچکی ظاهری شامل حدود 98 خط کد IL بود و کد دوم که بدون قابلیت Iterators و به صورت عادی و با قوانین معمولی OOP در VB.Net بود و به ظاهر بیشتر هم بود شامل حدود 45 خط کد IL بود !!!!!! (تست فوق بدون در نظر گیری دستورات ForEach انجام شده وو میتوانید به راحتی آن را آزمایش کنید.)

  5. #165
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    در لینک زیر #C با C#‎.NET مقایسه شده. باید نتیجه بگیریم این دو یکی هستند؟؟
    خیر... من نگفتم دقیقا یکی هستند، من گفتم معمولا بجای اینکه بگیم C#‎.NET بطور خلاصه میگیم #C... چون در واقع سی# یک زبان برنامه نویسی هست. فکر کنم این وسط داره سوء تفاهم میشه :)

    نقل قول نوشته شده توسط BlackDal
    هر چیزی که با یکی از زبان های دات نت مقایسه میشه الزاماً باید از سکوی دات نت باشه
    مطالبی مثل زیر در لینکی که دادی پیدا کردم :

    C#‎ is a language. It is implemented using the .NET framework
    There is difference between VB and VB.NET, but C#‎ is a new language, and it is C#‎.net

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

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


    ظاهراً این بحث مسیر درستی پیدا نخواهد کرد
    بهتره تمومش کنیم!
    موافقم... منم اصرار ندارم.

  6. #166
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    نقل قول نوشته شده توسط __H2__
    دست شما درد نکنه! لطف کردید! یکی از کلمات کلیدی اصلی VB برای پیاده سازی های OOP به همین راحتی کشک شد!!!!!!!!!
    کشک کشک هم نیست :)
    از شوخی گذشته، استفاده از این کلمه در سی# کاربرد زیادی نداره ( حداقل برای من ) و استفاده نکردن از اون باعث میشه که در یک چهارچوب خاص، کد نویسی کنیم. صد البته یک مزیت برای بیسیک.نت حساب میشه ولی حداقل من (!) ضرورتی در استفاده از اون در سی# ندیدم با اینکه استفاده از اون، کد نویسی رو راحت تر میکنه.

    نقل قول نوشته شده توسط __H2__
    من همچنان امیدوار به راه حلی در #C هستم، چون قبول فقدان آن در #C برایم کمی سخت است.
    من هم دنبال این گشتم که چطور اون رو در سی# استفاده کنم، تا جائی که به نتیجه رسیدم باید یک جوری از Attribute زیر برای متد استفاده کرد که البته نتیجه ای هم نگرفتم و واقعا نمیدونم چی به چیه ! ( خوردم به بم بست !!! )

    [System.Runtime.CompilerServices.MethodImpl(System. Runtime.CompilerServices.MethodImplOptions.Interna lCall)]


    نتیجه اش جالب بود! کد اول که با #C بود و خیلی هم کم بود و با قابلیت Iterators صورت گرفته بود با وجود کوچکی ظاهری شامل حدود 98 خط کد IL بود و کد دوم که بدون قابلیت Iterators و به صورت عادی و با قوانین معمولی OOP در VB.Net بود و به ظاهر بیشتر هم بود شامل حدود 45 خط کد IL بود !!!!!!
    iterators امکانات بیشتری به نسبت کلاسی داره که بهش اشاره کردید...

    راستی، یک مورد !!
    در بیسیک.نت، در داخل یک حلقه، نمیشه در اواسط کار، اجرای حلقه رو به ابتدای حلقه برد! درسته؟ ( همون کاری که کلمه continue در سی# میکنه )

  7. #167
    در بیسیک.نت، در داخل یک حلقه، نمیشه در اواسط کار، اجرای حلقه رو به ابتدای حلقه برد! درسته؟ ( همون کاری که کلمه continue در سی# میکنه )
    کی گفته نمیشه!

    اون مال قدیما بود که نمیشد.

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



    مواردی از بیسیک.نت که در سی# نیست :

    + پارامترهای اختیاری - Optional Parameters
    + صدا زدن متد مجازی بصورت غیر مجازی - کلمه کلیدی MyClass
    + استفاده از کلمه کلیدی With...End With برای جلوگیری از کد نویسی تکراری
    + تغییر طول یک آرایه - کلمه کلیدی Redim
    + هر برنامه نویس، نحوه کامپایل کدش را میتواند به دلخواه تنظیم نماید.
    + استفاده از کلمه کلیدی When در کنترل Catch های یک استثنا
    + وجود کلمه Is در ساختار Select Case...End Select
    + در بیسیک.نت، پیاده سازی متد از یک اینترفیس، با نامی متفاوت برای آن امکان پذیر است در حالی که سی# چنین اجازه ای نخواهد داد!
    + تعریف متغیر از نوع استاتیک در بدنه یک متد



    مواردی از سی# که در بیسیک.نت نیست :

    + استفاده از Unsafe Mode برای : استفاده از اشاره گرها ( Pointers ) ، جلوگیری کردن از GC برای انتقال یک متغیر در حافظه heap ( کلمه کلیدی fixed ) ، گرفتن اندازه یک داده ی از نوع مقداری ( کلمه کلیدی sizeof ) و اختصاص دادن فضا از حافظه stack به اشاره گری که به یک نوع مشخص اشاره دارد ( کلمه کلیدی stackalloc )
    + استفاده از کاراکتر گریز در رشته ها ( مثل سی++ ) - Escape Characters
    + مشخص کردن شیئ که بتواند بصورت نا هماهنگ تغییر پیدا کند - کلمه کلیدی volatile
    + پیاده سازی راحت برای کلاسهای مشتق شده از IEnumerable و انعطاف استفاده از Iterators
    + متدهای بدون نام که میتوانند در داخل یک متد دیگر پیاده سازی شده یا اینکه عضوی از یک کلاس نباشند.
    + Syntax آن دارای انعطاف قابل توجهی است.
    + کامنتهای طولانی را میتوان به سرعت در چند خط نوشت.
    + استفاده از عملگرهای checked و unchecked برای کنترل استثنای سرریز - Overflow exception control



    دیگر مقایسه ها :

    + سی# به بزرگی و کوچکی حروف حساس است و بیسیک.نت حساس نیست.
    + سی# کدهای مختصری داره و از نمادها و کلمات خاص تشکیل شده در حالی که در بیسیک.نت کدها عموما به زبان گفتاری نزدیک تر هستند.
    + قاعدتا سی# زبانی است که پایان دستور در آن با ; مشخص میگردد پس میتوان هر دستور را به دلخواه در خطوط متفاوتی نوشت، این کار به کمک استفاده از _ ( یا & و _ برای رشته ها )، تا حدود زیادی در بیسیک.نت امکان پذیر است.
    + سی# برای دات نت فریم ورک نوشته شده و این در حالی هست که بیسیک.نت آماده شده تا بتونه در دات نت کار کنه.
    + در بیسیک.نت استفاده از فضای نام My امکان پذیره، که میشه در سی# هم تا حدود زیادی ازش استفاده کرد.
    + در بیسیک.نت با کمک کلمه کلیدی Handles راحت میشه متدی رو برای یک رویداد مشخص کرد، ولی در سی# باید حتما این متد توسط =+ در لیستی قرار بگیره که توسط رویداد فراخوانی میشوند.



    موارد کوچک دیگری هم هست که بد نیست عنوان بشه، میتونه خیلی بیشتر از موارد زیر باشه :

    + در سی# از عملگرهای انتسابی بیتی =& و =^ یا =| میشه استفاده کرد.
    + در سی# از عملگرهای افزایش و کاهش ( ++ و -- ) میشه استفاده کرد و در بیسیک.نت، خودمون باید با =+ و =- کار لازم رو در یک دستور جداگانه ( برخلاف سی# ) انجام بدیم.
    + در سی# استفاده از Nullable Types بصورت آوردن علامت سوال بعد از نوع داده میتواند صورت بگیرد، مثلا ?int ، در بیسیک.نت از کلاس System.Nullable استفاده می شود.
    + در بیسیک.نت از کلمه کلیدی IsDbNull استفاده میشه و در سی# باید خودمون مقدار متغیر رو با مقدار System.DBNull.Value مقایسه کنیم.
    + در بیسیک.نت از عملگر ^ برای به توان رساندن یک عدد استفاده میکنیم، در سی# باید از کلاس Math استفاده کنیم.
    و و و ...
    آخرین ویرایش به وسیله PC2st : شنبه 29 اردیبهشت 1386 در 22:26 عصر دلیل: ویرایش شد... اشتباه وجود داشت.

  9. #169
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    حالا هم یک دفاع کنم، بد نیست، اظهار نظرات شخصی در مورد پست قبلی... :)


    + پارامترهای اختیاری - Optional Parameters
    قبلا صحبت شده، اگر بگم خیلی تکراری میشه :)


    + صدا زدن متد مجازی بصورت غیر مجازی - کلمه کلیدی MyClass
    در سی#، وقتی یک متد بصورت مجازی ( Virtual ) تعریف میشه، هیچ راهی نداره و متد override شده از کلاس به ارث رسیده باید بتونه بصورت 100% جای اون متد مجازی رو بگیره. بدون استفاده از این کلمه، هیچ مشکلی برای پیاده سازی ها پیش نمیاد و به نظرم در صورت استفاده نکردن از اون، یکسری قواعد زیر پا گذاشته نمیشه و استفاده از اون باعث راحتی کار میشه.


    + استفاده از کلمه کلیدی With...End With برای جلوگیری از کد نویسی تکراری
    من برای اینکار از Copy و Paste استفاده میکنم و استفاده نکردن از With، باعث میشه که مسیرهای موجود به راحتی و در هر خط، قابل تشخیص باشند و استفاده کردن هم باعث میشه که کد جمع و جور تر به نظر بیاد.



    + تغییر طول یک آرایه - کلمه کلیدی Redim
    نظر بخصوصی ندارم!



    + هر برنامه نویس، نحوه کامپایل کدش را میتواند به دلخواه تنظیم نماید.
    میتونه باعث بشه که یک برنامه توسط هر برنامه نویس به یک سبک نوشته بشه... بعضی ها casting رو رعایت نکنند و بقیه رعایت کنند یا غیره و اینجوری کدهای یکسانی نوشته نمیشه و در بعضی تنظیمات، ممکنه عادات بدی رو به جا بگذاره.



    + استفاده از کلمه کلیدی When در کنترل Catch های یک استثنا
    باعث راحتی کار میشه و جالب به نظر میرسه! این در حالی هست که در سی#، یک دستور Catch فقط یک وظیفه دارد و آن هم رسیدگی به خطاهاست نه چیز دیگه. ( امان از دست این پایبندی های سی# !)



    + وجود کلمه Is در ساختار Select Case...End Select
    فکر کنم باعث راحتی کار بشه.
    در سی# هر دستور کار خودش رو میکنه. برای این منظور از if استفاده میکنم. ( باز هم همون پایبندی !)


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



    + در بیسیک.نت، پیاده سازی متد از یک اینترفیس، با نامی متفاوت برای آن امکان پذیر است در حالی که سی# چنین اجازه ای نخواهد داد!
    به نظرم این مورد، یک ضعف برای بیسیک.نت به حساب میاد. یک قابلیت اضافی برای بیسیک.نت حساب میشه ولی باعث در هم ریختگی وضعیت کلاسها میشه.



    + سی# کدهای مختصری داره و از نمادها و کلمات خاص تشکیل شده در حالی که در بیسیک.نت کدها عموما به زبان گفتاری نزدیک تر هستند.
    کد خلاصه تر باعث میشه زمان کمتری برای تایپ لازم باشه! فرض کن بخوای کدت رو توی Notepad بنویسی و بعد کامپایلش کنی!


    همش نظرات شخصی بود، ممکنه شما اون مواردی که من گفتم بده، از نظر شما خوب باشه.
    آخرین ویرایش به وسیله PC2st : جمعه 28 اردیبهشت 1386 در 17:41 عصر دلیل: شد

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

    کد خلاصه تر باعث میشه زمان کمتری برای تایپ لازم باشه! فرض کن بخوای کدت رو توی Notepad بنویسی و بعد کامپایلش کنی!


    همش نظرات شخصی بود، ممکنه شما اون مواردی که من گفتم بده، از نظر شما خوب باشه.
    خدایی؟ تا حالا چند خط کد توی نوت پد نوشتی؟

  11. #171
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    خدایی؟ تا حالا چند خط کد توی نوت پد نوشتی؟
    خدائیش... هیچی! :)
    بعدا شاید یه روز مجبور شدم توی Notepad بنویسم!!

  12. #172
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    ببخشید، یک مورد رو یادم رفته بود اضافه کنم! اونهم تعریف کردن یک متغیر از نوع استاتیک در بدنه یک متد در بیسیک.نت بود ! :) ( این رو هم اضافه کردم )

    + تعریف متغیر از نوع استاتیک در بدنه یک متد
    فکر کنم این کار رو انجام ندیم بهتره...

  13. #173
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام به برادران شفیق! به جوانان رشید دات نت کار!
    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    + استفاده از کلمه کلیدی global زمانی که تداخلی در نامهای مشابه بوجود میآید.
    از کجا به این نتیجه رسیدید که Global در VB.Net وجود ندارد ؟!؟!؟!؟!؟!؟!

    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    + Syntax آن دارای انعطاف قابل توجهی است.
    همانطوری که قبلاً بحث شد، Syntax دلیل نیست به قول دوستی، شما از سینتکس A خوشتان می آید و آن را قوی و راحت میدانید و من از B !!!!

    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    + کامنتهای طولانی را میتوان به سرعت در چند خط نوشت.
    عجب !!!!! ما بعد از عمری برنامه نویسی نمیدانستیم که در VB نمیشود در چند خط دستوری را شکست !!!!! تازه به نظر می آید VB در این مورد ساده تر عمل میکند! مثلاً دو تعریف زیر را در نظر بگیرید، کدام خلاصه تر هستند؟؟؟؟؟؟

    System.Data.SqlClient.SqlConnection dbCon = new System.Data.SqlClient.SqlConnection("ConnectionString");

    Dim dbCon As New System.Data.SqlClient.SqlConnection("ConnectionString")


    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    + در سی# از عملگرهای انتسابی بیتی =& و =^ یا =| میشه استفاده کرد.
    در عوض در VB.Net هم عملگر ^ برای توان (خودتان هم گفتید) ونیز =^ برای توان رسانی سریع را داریم!!!!

    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    + در سی# استفاده از Nullable Types بصورت آوردن علامت سوال بعد از نوع داده میتواند صورت بگیرد، مثلا ?int ، در بیسیک.نت از کلاس System.Nullable استفاده می شود.
    در این مورد هم گرچه در IL فرق ندارند ولی در VB9 اضافه شده.

    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    + در بیسیک.نت از کلمه کلیدی IsDbNull استفاده میشه و در سی# باید خودمون مقدار متغیر رو با مقدار System.DBNull.Value مقایسه کنیم.
    یک دفاع هم از #C بکنیم ضرر ندارد! (بفهمند پدر کشتگی نداریم!) من هیچ وقت از IsDbNull استفاده نکردم و همیشه از همان مقایسه نوع استفاده میکنم، بیشتر خوشم می آید.

    به نظرم این مورد، یک ضعف برای بیسیک.نت به حساب میاد. یک قابلیت اضافی برای بیسیک.نت حساب میشه ولی باعث در هم ریختگی وضعیت کلاسها میشه.
    به نظر من اصلاً ضعف نیست و کمال قدرت است! کلمه کلیدی Implements کاملاً روابط را مشخص میکند و کدی تمیز و بی نقص میدهد!

    راستی من مطلب فوق را در #C نمیدانستم! یعنی اگر دو Interface که دارای دو متد هم نام باشند در کلاسسی تعریف شوند، چه میشود ؟

  14. #174
    با تشکر از دوستان برای بیان شباهت ها و تفاوت ها،

    اما آیا واقعا نحوه کامنت گذاری چند خطی (وقتی در هر دو با یک کلید میان بر میشه این کار رو کرد) ، یا بود ونبود یک دو تا Keyword می تونه دلیل انتخاب یک زبان بشه ،یا مثلا برای مکانیزه کردن یک سیستم پیچیده مثل یک بانک ، بیمه یا .... واقعا این چیزها مهمه ؟

    یا مثلا مایکروسافت در آزمون هاش (MCSD,MCSE,......)یا همه اون جاهایی که سطح تخصص و توانایی رو مشخص می کنند ، سطح توانایی برنامه نویس ها رو با این چیزها می سنجند؟
    یا وقتی شما می خوای یک جا استخدام بشی درباره عملگرهای بیتی ، یا نحوه کامنت گذاری ازتون می پرسند؟

    آیا برای یک برنامه نویس حرفه ای و یا حتی برای کامپایلر بود ونبود یک Keyword یا چند خطی کردن دستورات یا شیک بودن ظاهر کد مهمه (همون طور که در پست های قبلی دوستان مثال زدند اگر شما از امکانات زبان مد نظرتون اطلاعات کامل داشته باشید می تونید کدهای بهینه تری نسبت کسانی که اطلاع کافی ندارند بنویسید)؟

    آیا اصلا مهم نیست که یک زبان برنامه نویسی چقدر توانایی پیاده سازی مفاهیم اساسی برنامه نویسی و تولید نرم افزار را داره؟

    آیا بررسی توانایی کامپایلرها در همون چند خطی که در پست های قبلی بود تموم میشه؟

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

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

    آیا مهم نیست یک زبان چطور پیاده سازی مستندات و تبدیل آنها به یک برنامه رو ساده میکنه؟

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


    به نظر من اگر می خواهیم بحثی کنیم در این موارد باشه ، چون همه ظواهر سلیقه ای هستند و هر کس بنا به عادت و سلیقه ظاهر رو انتخاب میکنه!

    و اگر این دو زبان در موارد پایه ای و اساسی برابرند دیگه چه بحثی می مونه؟

  15. #175
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    نقل قول نوشته شده توسط __H2__
    سلام به برادران شفیق! به جوانان رشید دات نت کار!
    سلام بر استاد عزیز و گرامی...
    از نظر من همه کاربران سایت، استاد هستند، من هم به عنوان یک دانشجو با اساتید بحث و گفتگو میکنم، چون اساتید همواره از دید دیگری به قضیه نگاه میکنند و دانشجویان یک دید دانشجوئی روی قضیه دارند :)


    از کجا به این نتیجه رسیدید که Global در VB.Net وجود ندارد ؟!؟!؟!؟!؟!؟!
    از اونجائی که این قابلیت رو پیدا نکردم! عجب دلیل مزخرفی! :(
    از نکته ای که گفتید ممنونم... ایرادم برطرف شد.


    همانطوری که قبلاً بحث شد، Syntax دلیل نیست به قول دوستی، شما از سینتکس A خوشتان می آید و آن را قوی و راحت میدانید و من از B !!!!
    راستش بهتر بود یک مثال میزدم :)
    اینم یک مثال از سنتکس قابلیت انعطاف :

    for( int a = 0, b = 0; a < 5; a++, b++ )
    {
    MessageBox.Show( ((int)( a * b )).ToString() );
    }

    اگر معادل حلقه for فوق رو دقیقا مثال بالا، در بیسیک.نت پیدا کنید ممنون میشم...


    مثلاً دو تعریف زیر را در نظر بگیرید، کدام خلاصه تر هستند؟؟؟؟؟؟
    استفاده از using در سی# مشکل رو حل میکنه.
    حالا چی؟ چه چیزی مشکل رو حل میکنه؟ مثل زیر :

    Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub
    End Class

    یا :

    public class Form1 : Form
    {
    private void Form1_Load( object sender, EventArgs e )
    {
    }
    }



    راستی من مطلب فوق را در #C نمیدانستم! یعنی اگر دو Interface که دارای دو متد هم نام باشند در کلاسسی تعریف شوند، چه میشود ؟
    هیچ مشکلی پیش نمیاد :) میشه هر کدومش رو به طور واضح پیاده سازی کرد. برای اینکار قبل از نام متد، نام اینترفیس اضافه میشه.


    public interface A
    {
    void A();
    }
    public class B : A
    {
    void A.A()
    {
    }
    }


    در بیسیک.نت :

    Public Interface A
    Sub A()
    End Interface
    Public Class B : Implements A
    Public Sub A() Implements A.A
    End Sub
    End Class

    حالا کدومشون تایپ کمتری لازم دارند ؟؟!


    حال ادامه بحث !!
    در عوض در VB.Net هم عملگر ^ برای توان (خودتان هم گفتید) ونیز =^ برای توان رسانی سریع را داریم!!!!
    دوست عزیز نوشته بودم که :
    موارد کوچک دیگری هم هست که بد نیست عنوان بشه، میتونه خیلی بیشتر از موارد زیر باشه :
    بعدش اون مورد بیسیک.نت ( استفاده از ^ ) و در سی#، استفاده از عملگر انتسابی بیتی و ... رو در اونجا نوشتم! چون درسته که تفاوت دارند ولی میتوان مشابهشون رو در دیگر زبان پیدا کرد. پس فکر نمیکنم اینجا مشکلی وجود داشته باشه :) و یک سوء تفاهم کوچولو رخ داده.

    به نظر من اصلاً ضعف نیست و کمال قدرت است! کلمه کلیدی Implements کاملاً روابط را مشخص میکند و کدی تمیز و بی نقص میدهد!
    فرض کنید کلاسهای دات نت فریم ورک رو به همین شیوه مینوشتند! دیگه معلوم نبود هر متد برای چه اینترفیسی نوشته شده و عملا باعث بهم ریختگی کلاسها میشه.
    مثلا یک کلاس ToString رو به نام ToMyStr و یکی دیگه به نامه String و دیگری به نام ConvertToString استفاده میکرد! که این مورد هم به ماهیت دو زبان بر میگرده.

  16. #176
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    یا بود ونبود یک دو تا Keyword می تونه دلیل انتخاب یک زبان بشه ،یا مثلا برای مکانیزه کردن یک سیستم پیچیده مثل یک بانک ، بیمه یا .... واقعا این چیزها مهمه ؟
    میتونه تا حدودی مهم باشه.

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

    میدونم، با این چند خط مقایسه کوچک، اصلا نمیشه واقعا متوجه اصل قضیه شد ولی از هیچی بهتره.
    نتیجه ای که من گرفتم، سی# قوائد خاص خودش رو داره و بیسیک.نت هم قوائد خاص خودش.

    مثلا از نظر من سی# بهتره، چون در یک چهار چوب خاص ( حالات کمتر ) باید کد نوشته بشه تا کدها ( کلاسها ) مرتب تر سازماندهی شوند.
    در حالی که قابلیتی مثل MyClass در سی++ هم وجود داشت!
    ولی سی# این رو در خودش جای نداد ( و فکر کنم جای نخواهد داد )
    چون ماهیت سی# و نگاه سی# به شی گرائی تا حدودی با سی++ یا بیسیک.نت فرق میکنه.
    فکر کنم با اون تفاوتهائی که من نوشتم، بشه تشخیص داد که ماهیت این دو زبان چیست.
    حالا هر کسی خودش میتونه انتخاب کنه که کدوم قوائد واسش بهتره.

    بیسیک.نت هم استاندارد خاص خودش رو داره که طی این استاندارد باید به گونه ای باشه که با vb هم سازگار باشه و طبق اصل بیسیک، راحت هم باشه و با .نت هم کار کنه.

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

  17. #177
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام مجدد به اساتید جوان رشید دات نت کار!!! (بهتر شد؟)

    با عرض پوزش از کاربر arsp_2004 (وقتی سوال و مسئله ای مطرح میشود ما هم مجبور به جواب میشویم! پس با اجازه!)

    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    راستش بهتر بود یک مثال میزدم :)
    اینم یک مثال از سنتکس قابلیت انعطاف :

    for( int a = 0, b = 0; a < 5; a++, b++ )
    {
    MessageBox.Show( ((int)( a * b )).ToString() );
    }

    اگر معادل حلقه for فوق رو دقیقا مثال بالا، در بیسیک.نت پیدا کنید ممنون میشم...
    چشم! خواهش دارم! خداحافظ شما! سلام علیکم!

    For a AsInteger = 0 To 5
    MessageBox.Show(
    CStr(a * a))
    Next

    سه خط! حال کردی دوست شفیق! باشه حالا قهر نکن!

    Dim a AsInteger = 0, b AsInteger = 0
    DoWhile a < 5
    a += 1 : b += 1
    MessageBox.Show(
    CStr(a * b))
    Loop


    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    استفاده از using در سی# مشکل رو حل میکنه.
    یعنی چی ؟؟؟؟؟؟؟؟؟؟؟؟؟ استفاده از using در آن مورد خاص چه مشکلی را حل میکند؟

    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    حالا چی؟ چه چیزی مشکل رو حل میکنه؟ مثل زیر :

    Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    End Sub
    End Class

    یا :

    public class Form1 : Form
    {
    private void Form1_Load( object sender, EventArgs e )
    {
    }
    }
    نشد دیگه! شما یک خط دستور #C را در بالا ننوشتید! اینجوری معاملمون نمیشه!!!

    this.Load += new System.EventHandler(this.Form1_Load);

    بدون این خط دستور فوق در #C کار نمیکند! حالا کدام کوتاه تر است ؟؟؟؟ تازه نبود حالت فوق در #C من را دچار مشکلی کرده که در تاپیکی مطرح کرده ام و هنوز کسی جوابی برای حل آن در #C نداده!


    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    هیچ مشکلی پیش نمیاد :) میشه هر کدومش رو به طور واضح پیاده سازی کرد. برای اینکار قبل از نام متد، نام اینترفیس اضافه میشه.


    public interface A
    {
    void A();
    }
    public class B : A
    {
    void A.A()
    {
    }
    }
    من این را به عنوان ابهام نگفتم، و میخواستم خودم بدانم و بابت جوابتان ممنون هستم.

    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    فرض کنید کلاسهای دات نت فریم ورک رو به همین شیوه مینوشتند! دیگه معلوم نبود هر متد برای چه اینترفیسی نوشته شده و عملا باعث بهم ریختگی کلاسها میشه.
    مثلا یک کلاس ToString رو به نام ToMyStr و یکی دیگه به نامه String و دیگری به نام ConvertToString استفاده میکرد! که این مورد هم به ماهیت دو زبان بر میگرده.
    بازم نشد! بسیاری از رابطهای دات نت پیاده سازی های private دارند و راه اصلی دسترسی به Interface های یک کلاسس استفاده مستقیم از متدهای آن کلاسس نیست، باید رابط اشاره گر رابط مورد نظر از دل کلاسس مورد نظر بیرون کشیده شود و از متدهای اشاره گر رابط استفاده شود که با این کار چه در VB و چه در #C باید متدها هم نام رابط صدا زده شوند و ربطی به پیاده سازی داخلی در کلاسس ندارد، در اصل این ارزش و قابلیت رابطها است و یک زبان شی گرا نمیتواند نقضش کند.

    + پیاده سازی راحت برای کلاسهای مشتق شده از IEnumerable و انعطاف استفاده از Iterators
    یادتان رفت بگویید به بهای تولید کد IL بیشتر!

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

    Dim a As Integer = 0, b As Integer = 0
    Do While a < 5
    a += 1 : b += 1
    MessageBox.Show(CStr(a * b))
    Loop

    میشه بپرسم چه انعطاف بخصوصی در اون بکار رفته ؟! شما اون کاهش و افزایش رو در بدنه حلقه Do While قرار دادید و من اون رو در اعلان حلقه for و من دو متغیر رو در اعلان یک for تعریف کردم و شما اون دو تا رو بصورت یک دستور جداگانه قبل از حلقه While... ! میشه بپرسم انعطاف اینهائی که نوشته بودید، در چه موردی بود ؟!


    یعنی چی ؟؟؟؟؟؟؟؟؟؟؟؟؟ استفاده از using در آن مورد خاص چه مشکلی را حل میکند؟
    در بالای کدهاتون بنویسید :

    using System.Drawing;

    بعدش :

    Point p = new Point();



    نشد دیگه! شما یک خط دستور #C را در بالا ننوشتید! اینجوری معاملمون نمیشه!!!
    این موردی که گفتید یک استثناء است و قصد من گفتن کنترل Event ها نبود، تا آنجائی که من شنیدم، این مورد در بیسیک.نت راحت تر صورت میگیرد و جزء همان مواردی هست که در یک زبان هست و در دیگری هم وجود داره ولی با تفاوت، که من یادم رفته بود بنویسم و الان اضافش کردم. اما در مورد مبحثی غیر از این، و بطور کلی تر، تایپ کدهای سی# همواره کمتر خواهد بود. ( من تا سه ساعت بیام بنویسم IF...Then...End IF یا بنویسم Class A : Implements B و ... )



    تصحیح شد...




    بسیاری از رابطهای دات نت پیاده سازی های private دارند
    نه اینطوری نیست، رابطها اصلا پیاده سازی ندارند، شاید منظور شما کلاسهای مجرد یا abstract بوده است.


    بازم نشد! بسیاری از رابطهای دات نت پیاده سازی های private دارند و راه اصلی دسترسی به Interface های یک کلاسس استفاده مستقیم از متدهای آن کلاسس نیست، باید رابط اشاره گر رابط مورد نظر از دل کلاسس مورد نظر بیرون کشیده شود و از متدهای اشاره گر رابط استفاده شود که با این کار چه در VB و چه در #C باید متدها هم نام رابط صدا زده شوند و ربطی به پیاده سازی داخلی در کلاسس ندارد، در اصل این ارزش و قابلیت رابطها است و یک زبان شی گرا نمیتواند نقضش کند.
    متاسفانه این قسمت رو متوجه نشدم.
    آخرین ویرایش به وسیله PC2st : شنبه 29 اردیبهشت 1386 در 17:00 عصر دلیل: تصحیح شد...

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


    در سی#، وقتی یک متد بصورت مجازی ( Virtual ) تعریف میشه، هیچ راهی نداره و متد override شده از کلاس به ارث رسیده باید بتونه بصورت 100% جای اون متد مجازی رو بگیره. بدون استفاده از این کلمه، هیچ مشکلی برای پیاده سازی ها پیش نمیاد و به نظرم در صورت استفاده نکردن از اون، یکسری قواعد زیر پا گذاشته نمیشه و استفاده از اون باعث راحتی کار میشه.
    فکر کنم بهتر بود میگفتم که، قوائد سی# زیر پا گذاشته نمیشه ! ( چون قوائد بیسیک.نت چیز دیگه است )

  20. #180
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام بر جوانان غیور دات نت کار ایران! اساتید حال و آینده!!!!!! پیشاپیش از حضار و اساتید بزرگ به دلیل طولانی شدن مجدد پاسخم عضر خواهی میکنم!
    میدونید! من دیشب رفتم سر کوچه دولیتر گازوئیل گرفتم و ریختم تو مخم و همشو سوزوندم! آخرش به این نتیجه رسیدم:!
    " من واقعاً لذت میبرم این جوانان رشید و منصف را میبینیم که هیچ وقت از راه انصاف و مرام دور نمیشوند و تمایلات شخصی شان را قاطی نمیکنند!!! "

    آخه انصاف تون و شکر!
    هر کجا VB دست برنامه نویس را باز میزاره تا راحت باشه و زیر ساختها را از اون مخفی میکنه این جزو معائب و گناهان کبیره VB.Net محسوب میشه (مثل همین کد کثیف Form1.Show و...) ولی هر جا #C همین کار را انجام میده این جزو امکانات ملکوتی #C حساب میشه (مثل yield و...) حتی VB.Net بیچاره اگر صرفاً دست برنامه نویس را باز بذاره و زیر ساخت خاصی را هم مخفی نکنه و امکان و قدرت فزونی در اختیار اون بذاره باز هم جزء معایب آن حساب میشه (مثل همین نام ها در پیاده سازی های رابط ها که به نظر من برتری VB.Net در این مورد است و...)
    ولی دوباره هر کجا #C دست برنامه نویسش را باز میذاره و او را آزاد میذاره و قید و بند را از اون بر میداره این باز هم جزء امکانات بی نظیر اون حساب میشه (مثل همین حلقه For بی حساب و کتاب! و...) حتی وقتی VB.Net برنامه نویس را محدود میکند و مثلاً او را مجاب میکند که در حلقه های For صرفاً یک ایندکس داشته باشیم تا از اشتباه جلوگیری شود بازهم آن را چزء معایبش حساب میکنید نه سردتان میسازد نه گرمتان!

    به بیان غیر پوشیده میتوان گفت هر چیزی را که رفتاری شبیه #C نداشته باشد جزء معایب میدانید، شما رأی خود را صادر کرده اید و اینجا صرفاً VB را با معیارهای خودتان محاکمه میکنید و بررسی واقعی مزیت و عیب در کار نیست (هر چه #C دارد حسن است و هرچه ندارد اگر زبانی داشته باشد عیب آن زبان است! تفکر جالبی است! هر که طبق #C رفتار میکند شما قبول دارید و هر که نیست در پیت است!!!!!!!!)

    با برسی در پستهای قبلی بیشتر ایرادها و معایبی را که دوستان مطرح کردند من چیزی جز غالب فوق الذکر ندیدم.

    متاسفانه این قسمت رو متوجه نشدم.
    علمای دات نت کار (#C یا VB.Net و...) بهتر از هر کسی میدانند که نام متد در کلاسسی تضمینی بر اجرای متد همنام با رابطی نیست و برای اجرا و دسترسی بی نقص و کامل به اعضای یک رابط باید اشاره گر رابط به دست بیاید و برای اجرای و دسترسی به اعضا باید از نام های مصوب استفاده شود و این در ذات اولیه اصول طراحی رابطها است و هیچ زبان برنامه نویسی توانایی نقض آن را ندارد، در خیلی از موارد هم اعضای موجود در کلاسس دسترسی protected دارند که برای دسترسی به رابط از خارج باید اشاره گرش بدست آید، حتی اساتید بهتر میدانند که بسیاری از رابطهای پیشرفته و قدرتمند دات نت با رابط System.IServiceProvider عرضه میشود که عملاً اشاره گر رابط را پس میدهد.
    بگذریم! به کد زیر دقت کنید!


    Public Interface ISample
    Sub SampleSub()
    ReadOnly Property SampleProperty() As Integer
    End Interface

    Public Class SampleClass
    Implements ISample

    Private ReadOnly Property ISample_SampleProperty() As Integer Implements ISample.SampleProperty
    Get
    Return 123
    End Get
    End Property

    Private Sub ISample_SampleSub() Implements ISample.SampleSub
    System.Windows.Forms.MessageBox.Show("OK!" & vbCrLf & "run ISample.SampleSub")
    End Sub
    End Class




    Dim X As New SampleClass()

    'Syntax error: 'ISample_SampleSub' Sub in not accessible in this context because it is 'Private'
    X.ISample_SampleSub()

    'Syntax error: 'SampleSub' is not a member of 'SampleClass'
    X.SampleSub()

    Dim I As ISample = X
    I.SampleSub()

    'Or
    'With DirectCast(X, ISample)


    Dim value As Integer = I.SampleProperty


    راه اصلی استفاده از یک رابط چیزی شبیه دستورات فوق است (در #C نیز همین است، باور ندارید، اساتید و مراجع #C حضور دارند) وقتی شما اشاره گر رابط را بدست آورید دیگر نام پیاده سازی شده و حتی سطح دسترسی مهم اصلاً نیست و شما میتوانید با خیال راحت اعضای رابط را استفاده کنید، باز هم تاکید میکنم که علمای حاضر در همینجا بهتر میدانند که مخصوصاً در حالات پیشرفته مثل دسترسی از طریق رابط قدرتمند System.IServiceProvider راه فوق تنها راه است.
    البته باز هم تاکید میکنم که یک قابلیت بسیار خوب است و اگر دوستان ناراحت نشوند من آن را برتری میدانم، در این مورد VB با قدرت دست برنامه نویسش را باز گذاشته ولی قوانین OOP را نقض نکرده (در اصل اگر میخواست هم نمیتوانست فقض کند!)
    راستی من #C بلد نیستم، (چشم بسته غیب گفتم!) ولی میشه شما لطف کنید و بگید وقتی دو رابط با یک متد هم نام در کلاسسی در #C پیاده سازی میشود، چطور میتوان به آن متد از خارج دسترسی داشت؟؟؟ و اینکه اگر بخواهیم بدون به دست اوردن اشاره گر رابط مورد نظر (همانطور که خودتان انجام میدهید) بخواهیم آن متد را صرفاً به وسیله اشاره گر کلاسس اصلی اجرا کنیم، چه کدی باید نوشت؟؟؟ (اگر به همان روشی باشد که من الآن حدس میزنم، مزیت جالب و قوی VB.Net در این مورد خاص مشخص میشود و شما هم در صورت منصف بودن به مثبت بودن وجود این امکان در VB.Net معترف میشوید و آن را با بی انصافی تمام جزء معایب حساب نمیکنید)



    در بالای کدهاتون بنویسید :

    using System.Drawing;

    بعدش :

    Point p = new Point();
    ها! ببخشید! من هواسم به این Using نبود ! در فکر آن Using بودم!!!
    آخه جدا از این مباحث من در جاهای دیگر هم اشاره کرده ام که اصلاً از دستور فوق و معال VB آن یعنی Implement خوشم نمی آید! و از آنها استفاده نمیکنم، (و این را با دقت در اکثر کدهایم متوجه میشوید که اغلب مسیرها کامل هستند) بحرحال حق با شماست و روش فوق کدنویسی را کاهش میدهد ولی توجه داشته باشید که کد VB هم باز کاهش می یابد و باز کمتر میشود!
    البته تاکید میکنم که بحث بر سر سینتکس اصلاً اصولی نیست ولی باز هم در مورد ان for توجه داشته باشید VB هم در مواردی کدی کمتر از #C تولید میکند (مثل همان رویدادها)
    (با تاکید مجدد بر عدم بث بر سر سینتکس! لطفاً ابهامات این تیپی مطرح نکنید که مجبور به پاسخ شویم!)


    فکر کنم بهتر بود میگفتم که، قوائد سی# زیر پا گذاشته نمیشه ! ( چون قوائد بیسیک.نت چیز دیگه است )
    VB.Net به هیج وجه اجازه کوچکترین تخطی از قوانین OOP و وراثتی را نمیدهید، اگر میتوانید مثالی بزنید وگرنه اینطور تخریب چهره نکنید!!!!!!!!!!!


    در سی# هر دستور کار خودش رو میکنه. برای این منظور از if استفاده میکنم. ( باز هم همون پایبندی !)
    همان مسئله اول که گفتم! چون #C قابلیت When را ندارد پس باید توجیهی آورده شود! آیا استفاده از for به جای while مصداق حرف شماست؟ و...


    + استفاده از عملگرهای checked و unchecked برای کنترل استثنای سرریز - Overflow exception control
    در VB.Net میتوان تا حدودی این کار را انجام داد! و گزینه مورد نظر را برای کل پروژه تایین کرد. (که خطای سرریز را بگیرد یا نه! البته در کل پروژه)


    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    ببخشید، یک مورد رو یادم رفته بود اضافه کنم! اونهم تعریف کردن یک متغیر از نوع استاتیک در بدنه یک متد در بیسیک.نت بود ! :) ( این رو هم اضافه کردم )
    فکر کنم این کار رو انجام ندیم بهتره...
    چرا؟ برای اینکه #C این قابلیت را ندارد بزهم نتیجه گرفتید که این قابلیت بدی است؟؟؟؟؟؟؟ (همان تفکر که در اول گفتم)




    بعدا شاید یه روز مجبور شدم توی Notepad بنویسم!!
    توجه تان را به مسئله حساسیت به حروف بزرک و کوچک جلب میکنم، این مسئله در جای غیر از ادیتور مخصوص میتواند منشاء خطاهای بسیار شود! تازه میتوانید درج پرانتز در انتهای متدهای بدون پارامتر را هم در نظر بگیرید، با کمی بی دقتی دچار مشکلات بسیار میشوید.
    تازه من همیشه در دستورات پیچیده SQL با پرانتزهای باز شده و تعداد بسته شده ها مشکل پیدا میکنم، شما اطمینان دارید که در پروژه بزرگ با گیومه باز و بسته شده مشکل پیدا نمیکنید؟
    گرچه همچنان تاکید میکنم این یک مورد سینتکسی است و صحبت در مورد آن غیر علمی است ولی وقتی دوستان ابهامی مطرح میکنند ناچار به پاسخ هستیم.

    اگر هم بحث را به ادیتور ها بکشانیم میتوالن گفت:
    عزیز دل برادر ، قدرت ادیتور VB.Net را دست کم گرفته اید! شما خط اول را بنویسید و Enter را بزنید مابقی را ادیتور دات نت تایپ میکند!
    مثلاً شما بنویسید Try و Enter کنید، VB.Net با هوشمندی و سخاوت تمام Catch ex As Exception و نیز End Try را تایپ میکند!
    از این بحثها اصلاً خوشم نمی آید ولی مجبورم قدرت کم نظیر ادیتور VB.Net را یادآوری کنم، من زبانهای بسیار و ادیتورهایشان را دیده ام ولی به جرأت میگویم تا حالا ادیتوری قوی تر و کامل تر از VB.Net ندیده ام! دلیل دارم! همین درج کدهای قطعی و واضح، کافیست دستوری را بنویسید و آن دستور لزوم کدهایی دیگر را قطعی کند، بعد از زدن Enter کلیه کدهای قطعی به صورت خودکار تایپ میشوند، مثل نمونه فوق یا کافیست شما از کلاسسی وراثت بگیرید که آن کلاسس شامل اعضای MustOverride باشد و کلاسس شما هم برچسب MustInherits را نداشته باشد، فوراً دستورات Overrides اعضای مورد نظر به طور خودکار تایپ میشوند، یا وقتی رابطی را پیاده سازی میکنید، لازم نیست تک تک اعضای رابط را دستی بنویسید، بعد از Enter پیاده سازی رابط مورد نظر فوراً درج میشود و یا امکان ارائه گزارش کامل کلیه خطا ها و هشدارها در هر لحظه و بدون نیاز به کامپایل و یا با یک نک Backspace فوراً لیست لغات مجاز قابل تایپ ظاهر میشود (بله در #C هم وجود دارد ولی اگر لیست بسته شود برای باز شدن مجدد آن باید مدام Backspace زده شود تا به سر بلوکی مشخص برسیم و لیست مجدداً باز شود و یا نگه داری همیشه گی کدها در حالت تمیز و شتری شده صحیح که تخطی از آن غیر ممکن است! و... (برای چندمین بار تاکید میکنم که این بحث ها علمی نیستند، آنها را وسط نکشید که مجبور به پاسخ شویم!)
    تازه از این گذشته، آیا کدهای پروژه های بزرگ و تمیز C را ندیده اید؟؟؟؟؟ (بعید میدانم) من بارها در کدهای تمیز و بی نقص بزرگان C خطول این تیپی را دیده ام!


    } //end loop

    } //end if

    etc ...


    وقتی بزرگان C به صورت عمدی .... چی بگم آخه؟؟!! واقعاً نمیدانم میتوانم شما را راضی کنم یا نه؟! اگر کمی منصف تر باشید متوجه میشوید که VB8 دیگر آن در پیت غیر قابل قیاس با ++C نیست که حتی مقایسه شان باعث خنده میشد، کمی تعصبتان را کم کنید و چشمانتان را باز کنید (چشم ها را باید شست، جور دیگر باید دید) اونوقت حقیقت را درک میکنید.
    علاما و فضلا و فقها (و مراجع #C !) در صورت نیاز و ابهام جدید ما همچنان در خدمت هستیم.
    موفق و پیروز و سربلند باشید.

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

    آخه انصاف تون و شکر!
    هر کجا VB دست برنامه نویس را باز میزاره تا راحت باشه و زیر ساختها را از اون مخفی میکنه این جزو معائب و گناهان کبیره VB.Net محسوب میشه (مثل همین کد کثیف Form1.Show و...) ولی هر جا #C همین کار را انجام میده این جزو امکانات ملکوتی #C حساب میشه (مثل yield و...) حتی VB.Net بیچاره اگر صرفاً دست برنامه نویس را باز بذاره و زیر ساخت خاصی را هم مخفی نکنه و امکان و قدرت فزونی در اختیار اون بذاره باز هم جزء معایب آن حساب میشه (مثل همین نام ها در پیاده سازی های رابط ها که به نظر من برتری VB.Net در این مورد است و...)
    منظورم از ایرادات این بود که اگر سی# جائی دستمون رو باز میگذاره، لطمه ای به کدهای نوشته شده نمیخوره ولی در بیسیک.نت جائی که دست برنامه نویس باز میمونه، برای بعد میتونه مشکل ساز بشه... مثلا همین قرار دادن متغیر استاتیک در یک متد و کامپایل کد به طرق مختلف و ... همه اینها برای سازگاری با VB قرار داده شدند، که به نظرم بهتره استفاده نشه...



    به بیان غیر پوشیده میتوان گفت هر چیزی را که رفتاری شبیه #C نداشته باشد جزء معایب میدانید، شما رأی خود را صادر کرده اید و اینجا صرفاً VB را با معیارهای خودتان محاکمه میکنید و بررسی واقعی مزیت و عیب در کار نیست (هر چه #C دارد حسن است و هرچه ندارد اگر زبانی داشته باشد عیب آن زبان است! تفکر جالبی است! هر که طبق #C رفتار میکند شما قبول دارید و هر که نیست در پیت است!!!!!!!!)



    با برسی در پستهای قبلی بیشتر ایرادها و معایبی را که دوستان مطرح کردند من چیزی جز غالب فوق الذکر ندیدم.
    درسته، کاملا درسته :)
    بهمین خاطر اینبار صحبت درباره عیبها رو در یک پست جداگانه ( پست شماره 93 ) و تحت عنوان "اظهار نظر شخصی" قرار دادم و به قول شما چیزی که شبیه به سی# نبود رو یک عیب دونستم :) !!!!!
    وگرنه اون پستی ( پست شماره 92 ) که مربوط به مقایسه بود رو سعی کردم در حد امکان نظرهای شخصی نداشته باشه و هر کسی خودش یک نتیجه بگیره، هر چند که اون مقایسه هم میتونه تاحدودی صحیح نباشه.



    راستی من #C بلد نیستم، (چشم بسته غیب گفتم!) ولی میشه شما لطف کنید و بگید وقتی دو رابط با یک متد هم نام در کلاسسی در #C پیاده سازی میشود، چطور میتوان به آن متد از خارج دسترسی داشت؟؟؟

    public interface A {
    void M(); }
    public interface B {
    void M(); }
    public class C : A, B {
    void A.M() {
    Console.Beep( 800, 100 ); }
    void B.M() {
    Console.Beep( 100, 100 ); } }


    و مثلا برای صدا زدن متد پیاده سازی شده از اینترفیس B :

    ( ( B )( new C() ) ).M();

    همینطور که میبینید فقط یک بوق آرام ( بم ) شنیده میشه.


    (اگر به همان روشی باشد که من الآن حدس میزنم، مزیت جالب و قوی VB.Net در این مورد خاص مشخص میشود و شما هم در صورت منصف بودن به مثبت بودن وجود این امکان در VB.Net معترف میشوید و آن را با بی انصافی تمام جزء معایب حساب نمیکنید)
    کاملا داره در مورد Implements برای اینترفیسها ( رابطها ) سوء تفاهم میشه. منظور من این مواردی که شما گفتید نبود !
    منظور من این بود که در بیسیک.نت :
    میتوان نام های مختلفی برای متدهای پیاده سازی شده از رابط ها، ایجاد کرد که باعث ناهماهنگی بین کلاسهائی میشه که از اون رابط ها، استفاده کرده اند که انجام دادن این کار، جالب به نظر نمیرسه!



    VB هم در مواردی کدی کمتر از #C تولید میکند (مثل همان رویدادها)
    درسته و این یک مورد رو در پست مربوط به مقایسه ( پست شماره 92 ) قرار دادم. ولی در غیر اینصورت ( حتی بدون در نظر گرفتن حلقه for ) بطور کلی، کدهای سی# تا حدودی کمتر از بیسیک.نت است.



    VB.Net به هیج وجه اجازه کوچکترین تخطی از قوانین OOP و وراثتی را نمیدهید، اگر میتوانید مثالی بزنید وگرنه اینطور تخریب چهره نکنید!!!!!!!!!!!
    بله، و به همین خاطر بود که نوشتم :
    فکر کنم بهتر بود میگفتم که، قوائد سی# زیر پا گذاشته نمیشه ! ( چون قوائد بیسیک.نت چیز دیگه است )


    همان مسئله اول که گفتم! چون #C قابلیت When را ندارد پس باید توجیهی آورده شود!
    این مورد رو در قسمت "اظهار نظرات شخصی" نوشتم. که به نظرم سی# زبانی هست که یک چیزی مثل ctach کارش فقط کنترل استثنا هاست نه چیز دیگه ولی در بیسیک.نت خیر. چون سی# از سی++ و بیسیک.نت از ویژوال بیسیک 6 گرفته شده پس ماهیت این دو زبان در نحوه کنترل catch ها هم میتونه متفاوت باشه.



    چرا؟ برای اینکه #C این قابلیت را ندارد بزهم نتیجه گرفتید که این قابلیت بدی است؟؟؟؟؟؟؟ (همان تفکر که در اول گفتم)
    مورد تعریف کردن یک متغیر بصورت استاتیک در بدنه یک متد، میتونه جالب نباشه و به نظرم بهتره که تمام متغیرهایی که طول عمرشون بیشتر از اجرای یک متد است، بعنوان یک فیلد در بدنه یک کلاس تعریف شوند. در بیسیک.نت هر دو حالت امکان پذیره.



    توجه تان را به مسئله حساسیت به حروف بزرک و کوچک جلب میکنم، این مسئله در جای غیر از ادیتور مخصوص میتواند منشاء خطاهای بسیار شود! تازه میتوانید درج پرانتز در انتهای متدهای بدون پارامتر را هم در نظر بگیرید، با کمی بی دقتی دچار مشکلات بسیار میشوید.
    در مورد حساست، میتونه اینطور باشه.
    در مورد پرانتز، فکر نمیکنم مشکلی پیش بیاد، چون وقتی یک متد رو صدا میزنم، میدونم متد هست پس فراموش کردن پرانتز به معنای فراموش کردن کلمه Dim در بیسیک.نت است !



    شما اطمینان دارید که در پروژه بزرگ با گیومه باز و بسته شده مشکل پیدا نمیکنید؟
    شما چی؟ شما مطمئن هستید که در پروژه های بزرگ با موارد زیر مشکلی پیدا نمیکنید؟
    Class...End Class
    Interface...End Interface
    Module...End Module
    IF...End IF
    For...Next
    بکار بردن هر کلمه برای هر چیزی، باید بخصوص باشه، مثلا یک کلاس حتما باید با کلمه End Class پایان پیدا کنه نه چیز دیگه.
    که موارد بالا در سی# به شکل زیر :
    class
    interface
    static class
    if
    for
    و چهار چوب هر یک از اونها با { و } معلوم میشه نه چیز دیگه!
    در ضمن من فکر میکنم که یافتن بلاکهای { و } خیلی راحت تر از یافتن End Class یا End Module یا End Sub و ... باشه.



    عزیز دل برادر ، قدرت ادیتور VB.Net را دست کم گرفته اید! شما خط اول را بنویسید و Enter را بزنید مابقی را ادیتور دات نت تایپ میکند!
    مثلاً شما بنویسید Try و Enter کنید، VB.Net با هوشمندی و سخاوت تمام Catch ex As Exception و نیز End Try را تایپ میکند!
    بی خیال بابا ... :)
    در سی# لازم نیست که کلمه public یا private یا class و ... بصورت کامل تایپ بشه و لیست مورد نظر نمایش داده بشه. این جنبه هم مد نظر داشته باشید.
    یا وقتی رابطی را پیاده سازی میکنید، لازم نیست تک تک اعضای رابط را دستی بنویسید،
    از مظالبی که در زمینه IDE گفتی، این یکی رو قبول دارم.
    برای چندمین بار تاکید میکنم که این بحث ها علمی نیستند، آنها را وسط نکشید که مجبور به پاسخ شویم!
    موافقم.



    تازه از این گذشته، آیا کدهای پروژه های بزرگ و تمیز C را ندیده اید؟؟؟؟؟ (بعید میدانم) من بارها در کدهای تمیز و بی نقص بزرگان C خطول این تیپی را دیده ام!
    در پروژه های بزرگ و تمیز (!) و یا کد بی نقض بزرگان (!)، من (!) فکر میکنم به این دلیل بصورت کامنت نوشته شده که مثلا End If تا یک برنامه نویس تازه کار ( مثل من ) راحت تر تشخیص بده که اون بلاک به چه دردی میخوره.

  22. #182
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام مجدد.
    در سی# هر دستور کار خودش رو میکنه.
    این مسئله جای بحث بسیار دارد و میتوان ....

    و مثلا برای صدا زدن متد پیاده سازی شده از اینترفیس B :

    ( ( B )( new C() ) ).M();
    نگرفتی دل انگیز جان! منظورم در مورد ....

    + استفاده از عملگرهای checked و unchecked برای کنترل استثنای سرریز - Overflow exception control
    اگر این طور باشد VB.Net هم حداقل دو کلمه کلیدی دارد که معادلی در #C ندارند و تازه آن دو دوکار مختلف انجام میدهند در حالی که checked , unchecked یک مسئولیت را کنترلر میکنند و آن دو کلمه ....


    من جوابی برای ابهامات فوق آماده کرده بودم، ولی حالا به ذهنم رسید که یک نفر باید به این بحث طولانی پایان دهد! در نتیجه من ایثار میکنم و از جواب دادن خودداری میکنم تا دوستان ارجمند هم مجبور به جواب نشوند که بعد من هم ... !!!!! (وگرنه این بحث حساس ژئوپلتیکی تا معادله lim x, x->1/0 ادامه مییابد!) انشا ا... خاتمه ای باشد بر تاپیک پر کار فوق !

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

    خیلی دوست داشتم که تک تک کلمان دو زبان و معادل آن را مینوشتم تا مرجعی کامل داشته باشیم ولی وقت اجازه نداد و مجبوراً از معادل های واضحی که صرفاً لغت تغییر میکند پرهیز کردم.
    #VB.Net <-> C
    unsafe,fixed <-> جهت کد نویسی غیرامن، بدون معادل در VB.Net
    stackalloc <-> برای تخصیص حافظه در حالت کد نویسی غیر امن، در VB.Net (والبته در حالت مدیریت شده) میتوان از دستور New استفاده کرد.
    out <-> استفاده مستقیم از کلاسس System.Runtime.InteropServices.OutAttribute
    checked,unchecked <-> در VB.Net فقط میتوان برای کل پروژه آن را تایین کرد.
    volatile <-> استفاده مستقیم از کلاسس System.MTAThreadAttribute
    sizeof <-> استفاده مستقیم از تابع System.Runtime.InteropServices.Marshal.SizeOf
    yield <-> پیاده سازی عادی طبق قوانین OOP
    ?,?? <-> استفاده مستقیم و بی واسطه از کلاسس System.Nullable و دستور If یا IIf

    C#‎ <-> VB.Net
    MyClass <-> بدون معادل خام در #C، باید متدی میانه و private تعریف شود و متد قابل override و محل های دیگر مورد نیاز از آن استفاده کنند.
    Option Explicit On/Off <-> بدون معادل در #C، در #C همراه این قابلیت روشن است.
    Option Strict On/Off <-> بدون معادلدر #C، در #C همراه این قابلیت روشن است.
    Option Compare Text/Binary <-> در #C همراه این قابلیت همواره بر روی Binary است و در صورت نیاز باید از متدهای موجود خود فریم وروک استفاده کرد.
    On Error Resume Next <-> باید از دستورات پیاپی Try استفاده کرد.
    Handles,WithEvents,AddHandler,RemoveHandler <-> هندلینگ runtime به وسیله اپراتور =+
    Declare,Ansi,Unicode,Auto,Lib,Alias <-> استفاده مستقیم از کلاسس System.Runtime.InteropServices.DllImportAttribute و کلمه کلیدی extern
    Preserve <-> استفاده مستقیم از تابع System.Array.Reverse
    ReDim <-> استفاده مستقیم از تابع System.Array.Resize
    Erase <-> بدون معادل در #C
    Erase <-> میتوان در #C تمام اشاره گرها را برابر null قرار داد و جمع آوری کننده حافظه هرز را فراخانی کرد.
    And, Or <-> در صورت نیاز پیاده سازی در چند شرط (توجه: معادل &&, || کلمات AndAlso و OrElse هستند.)
    Stop <-> بدون معادل در #C، ولی در خیلی از مواقع (نه تمام موارد) میتوان از نقاط توقف (F9) استفاده کرد.
    Stop <-> استفاده مستقیم از متد System.Diagnostics.Debugger.Break
    Mid <-> شکستن کد و استفاده ترکیبی از اعضای کلاسس String
    Static in methods <-> متغیر مورد نظر باید سراسری تعریف شود.
    Is in select case <-> باید از switch استفاده نکرد و از if elseif استفاده کرد.
    With <-> در معادل دقیق باید متغیری محلی تعریف شود و از آن استفاده شود.
    Optional <-> بدون معادل قطعی در #C، ولی میتوان از Overload استفاده کرد و کدی بسیار مشابه ساخت.
    Like <-> با کمی دقت میتوان از کلاسس System.Text.RegularExpressions.Regex استفاده کرد.
    End <-> باید از متد System.Windows.Forms.Application.Exit استفاده کرد.
    When <-> باید از if در داخل بلوک catch استفاده کرد.
    CByte,CSByte,CShort,CUShort,CInt,CUInt,CLng,CULng, CDec,CDbl,CDate,CSingle,CStr,CChar <-> استفاده مستقیم از توبع کلاسس System.Convert
    CType <-> استفاده مستقیم از تابع System.Convert.ChangeType به همراه عملگر قالب ریزی.
    ^ <-> استفاده مستقیم و بی واسطه از تابع System.Math.Pow
    \ <-> بدون معادل قطعی در #C، ولی میتوان در بیشتر موارد از تابع System.Math.DivRem استفاده کرد.معادل\ (int)

    به نظرم کلمه رزو شده با اپراتوری را فراموش نکردم ولی چند نکته کوچک را هم برای تبدیل کد یاد آوری کنم، اساتید میدانند ولی ذکرش در اینجا بد نیست، چون منشع بسیاری از تبدیلات اشتباه است، پس با اجازه اساتید بیان میکنم:
    - برای مقایسه در #C باید از == و در VB.Net از =
    - برای مقایسه دو اشاره گر (شیء) در #C باید از == استفاده کرد و در VB.Net از Is
    - نماد null در #C با نماد Nothing در VB.Net برابر است.
    - کلمه پرکاربرد this در #C با Me در VB.Net برابر است.
    - و یک مشکل شایع دیگر! کاراکتر \ برای #C مفهوم خاصی دارد و برای VB.Net نه!
    در نتیجه در تبدیل به #C حواسشان باشد در نوشتن رشته های String خام در کدهای #C نباید بنویسید "C:\test.txt" بلکه کد درستش "C:\\test.txt" است! خود کامپایلر درستش میکند، این قضیه در #C مثل درج جفت کوتیشن است.
    و در تبدیل به VB.Net هم حواسشان باشد اسلش دوم را حذف کنید و آن را به امان خدا رها نکنید!
    یا باید در #C قبل از رشته خام مورد نظر کاراکتر @ قرار بگیرد.
    - در #C آرایه ها با [] دسترسی میشوند ولی در VB.Net درهمه جا و همه حال و بدون استثنا ایندکس ها با () است و اصلاً از [] استفاده نمیکند.
    - خیلی کم دیده ام ولی بهرحال کد a=b=c در C و VB کلاً مفهوم زمین تا زیر زمین دارد!!!
    - VB.Net اجازه تعریف متدی هم نام کلاسس پایه را نمیدهد مگر به طور واضح با Shadows بیان شود ولی این کلمه برای #C لازم نیست و در تبدیلات باید حذف یا اضافه شود.در #C میتوان از کلمه کلیدی new هم استفاده کرد.

    و بعضاً دوستان VB کار تازه کار در تبدیل کدهایشان به #C دچار اشتباهات زیر میشوند:
    - ; نماد پایان دستور در #C است و Enter معادلش در VB.Net است! پس بعد از پایان دستور ; فراموش نشود!
    - بعد از if و while و foeach و using و... در #C وجود یک جفت پرانتز اجباری است.

    با آرزوی موفقیت روز افزون، فعلاً بای!!!!
    آخرین ویرایش به وسیله __H2__ : سه شنبه 01 خرداد 1386 در 12:53 عصر دلیل: پیدا کردن معادل های جدید، (که برای گم نشدن روند تاپیک ها ویرایش کاملاً واضح انجام شده.)

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



    stackalloc <-> برای تخصیص حافظه در حالت کد نویسی غیر امن، در VB.Net (والبته در حالت مدیریت شده) میتوان از دستور New استفاده کرد.
    کلمه new در بیسیک.نت، شباهتی به stackalloc در سی# نداره. خودتون تاحدودی تفاوتش رو گفتید، من هم تا حدودیش رو بگم : stackalloc یک حافظه ی stack را برای یک اشاره گر اخذ میکند. ( حافظه stack نه heap و البته برای اشاره گر )



    volatile <-> استفاده مستقیم از کلاسس System.MTAThreadAttribute
    شباهتی بین این دو ندیدم.



    sizeof <-> استفاده مستقیم از تابع System.Runtime.InteropServices.Marshal.SizeOf
    بلد نبودم به کمک همین متد در بیسیک.نت، اندازه یک نوع داده ( مثل Integer ) رو بدون ایجاد یک شئ از اون، بدست بیارم! اگه کسی لطف کرد، کدش رو بگذاره.



    ReDim <-> استفاده مستقیم از تابع System.Array.Resize
    این مورد رو نمیدونستم... واقعا ممنونم.


    Erase <-> بدون معادل در #C
    اگر درست فهمیده باشم، مثلا مثل زیر ( خط پنجم ) :

    int[] A = new int[3];
    A[0] = 12;
    A[1] = 13;
    A[2] = 14;
    A = new int[3];
    MessageBox.Show( A[0].ToString() );




    Stop <-> بدون معادل در #C، ولی در خیلی از مواقع (نه تمام موارد) میتوان از نقاط توقف (F9) استفاده کرد.
    معادلش در دات نت، متد System.Diagnostics.Debugger.Break.



    Mid <-> شکستن کد و استفاده ترکیبی از اعضای کلاسس String
    یک مثال از معادلش :
    MessageBox.Show( "NO Way".Substring( 3 ) );




    \ <-> بدون معادل قطعی در #C، ولی میتوان در بیشتر موارد از تابع System.Math.DivRem استفاده کرد.
    معادلش در سی# :

    ( int )( 11 / 4 )




    - VB.Net اجازه تعریف متدی هم نام کلاسس پایه را نمیدهد مگر به طور واضح با Shadows بیان شود ولی این کلمه برای #C لازم نیست و در تبدیلات باید حذف یا اضافه شود.
    اگر درست فهمیده باشم، در سی#، استفاده از کلمه کلیدی new



    در نتیجه در تبدیل به #C حواسشان باشد در نوشتن رشته های String خام در کدهای #C نباید بنویسید "C:\test.txt" بلکه کد درستش "C:\\test.txt" است! خود کامپایلر درستش میکند، این قضیه در #C مثل درج جفت کوتیشن است.
    در سی#، استفاده از علامت @ قبل از رشته باعث میشه که وجود چنین کاراکترهائی، نادیده گرفته بشه.



    منم براتون آرزوی موفقیت لحظه افزون دارم :)

  24. #184
    بچه ها من چیز اطلاعات زیادی از تفاوت های بین این دو زبان ندارم
    ولی می دونم اگه شما سی شارپ را انتخاب کنید و با سینتاکس اون خو بگیرید و عادت کنید پس فردا اگه خواستید برید سراغ جاوا خیلی راحت ترید خواستید برید سراغ برنامه نویسی فلش یعنی اکشن اسکریپت بازم راحت ترید و خواستید برگردید به سی خدابیامرز بازم راحت ترید.

  25. #185
    کاربر دائمی آواتار __H2__
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    یک جایی بین Framework و نارمک!
    پست
    1,059
    سلام،
    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    کلمه new در بیسیک.نت، شباهتی به stackalloc در سی# نداره. خودتون تاحدودی تفاوتش رو گفتید، من هم تا حدودیش رو بگم : stackalloc یک حافظه ی stack را برای یک اشاره گر اخذ میکند. ( حافظه stack نه heap و البته برای اشاره گر )
    مظلوم گیر آوردی! چرا میزنی! خودم هم گفتم که معادل کامل ندارد.

    sizeof <-> استفاده مستقیم از تابع System.Runtime.InteropServices.Marshal.SizeOf
    بلد نبودم به کمک همین متد در بیسیک.نت، اندازه یک نوع داده ( مثل Integer ) رو بدون ایجاد یک شئ از اون، بدست بیارم! اگه کسی لطف کرد، کدش رو بگذاره.
    ای بابا خاهش دارم!!!! آقا نگید! بد! زشت!

    System.Runtime.InteropServices.Marshal.SizeOf(GetT ype(Integer)


    Erase <-> بدون معادل در #C
    اگر درست فهمیده باشم، مثلا مثل زیر ( خط پنجم ) :
    نوچ!!!! به نظر میرسد نمیدانید چه کار میکند! Erase آرایه را نابود میکند! البته حالا که فکرش را میکنم شاید بشود با کلاسس GC در #C کاری کرد وگرنه به طریقه های دیگر نمیشود، باید امتحان کنم.

    Mid <-> شکستن کد و استفاده ترکیبی از اعضای کلاسس String
    یک مثال از معادلش : MessageBox.Show( "NO Way".Substring( 3 ) );
    ای آقا نگید! بده! میگم شما VB کار نیستید نگید چرا؟؟؟؟؟؟؟ این که شما مثالش را زدید تابع Mid است !!!!! ولی آن که من گفت دستور Mid است!

    معادلش در سی# :
    ( int )( 11 / 4 )
    نمیدانم، ولی اگر این دستور تقسیم را به حالت اعشار به دست آورد و سپس آن را به عدد صحیح تبدیل کند معادل \ در VB.Net نمیشود.

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

    معادلش در دات نت، متد System.Diagnostics.Debugger.Break.
    جالب بود! مخصوصاً اولی! این #C یک کمی ناقولا شده ما خبر نداشتیما!!!! ممنون، لطف ببیتی! راستی پس باید نشانه هایی از قبیل n\ هم در حالت فوق دیگر کار نکند؟
    راستی اگر پست جدیدی زدید بگید این در ورژن 2003 هم بوده؟ (آخه نکته جالبیه و من مدت کمی که با C#‎2003 کار میکردم ندیدمش)
    دو مورد فوق را در پست قبلی ام اصلاح میکنم.

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


    امیدوارم ...

  26. #186
    کاربر دائمی آواتار PC2st
    تاریخ عضویت
    آذر 1385
    محل زندگی
    کرمانشاه
    سن
    38
    پست
    1,491
    مظلوم گیر آوردی! چرا میزنی! خودم هم گفتم که معادل کامل ندارد.
    شما مظلوم گیر آوردی...! :)
    هیچ شباهتی بین new در بیسیک.نت و stackalloc در سی# نمی بینم!
    از نظر من در بیسیک.نت معادل ناقصی هم وجود نداره ( ندیدم ).



    ای بابا خاهش دارم!!!! آقا نگید! بد! زشت!
    System.Runtime.InteropServices.Marshal.SizeOf(GetT  ype(Integer))
    از پاسخ ممنونم. ( راستی، کد IL متفاوت بود! )



    نوچ!!!! به نظر میرسد نمیدانید چه کار میکند! Erase آرایه را نابود میکند! البته حالا که فکرش را میکنم شاید بشود با کلاسس GC در #C کاری کرد وگرنه به طریقه های دیگر نمیشود، باید امتحان کنم.
    در مثال زیر :

    int[] A = new int[3];
    A = null;

    خط دوم، آرایه نابود میشه.



    ای آقا نگید! بده! میگم شما VB کار نیستید نگید چرا؟؟؟؟؟؟؟ این که شما مثالش را زدید تابع Mid است !!!!! ولی آن که من گفت دستور Mid است!
    به کمک کلاسهای دات نت :
    در مثال زیر :

    StringBuilder sBuilder = new StringBuilder( "Hello Man to Work" );
    MessageBox.Show( sBuilder.Replace( "Man", "MEN", 6, 3 ).ToString() );

    یا بهتر از اون، یعنی :

    MessageBox.Show( "Hello Man to Work".Remove( 6, 3 ).Insert( 6, "MEN" ) );

    ... محتویات در message box نمایش داده میشه.



    نمیدانم، ولی اگر این دستور تقسیم را به حالت اعشار به دست آورد و سپس آن را به عدد صحیح تبدیل کند معادل \ در VB.Net نمیشود.
    کاملا معادل اند. کار انجام شده در سی# رو با بیسیک.نت از لحاظ IL مقایسه کنید، تفاوتی نخواهند داشت.



    راستی اگر پست جدیدی زدید بگید این در ورژن 2003 هم بوده؟ (آخه نکته جالبیه و من مدت کمی که با C#‎2003 کار میکردم ندیدمش)
    تا بحال سی# 2003 به عمرم ندیدم :)



    کلمه new را در همان خط تعریف متد می آورید؟
    بله.



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

    Public Class A
    Public Sub Ver()
    End Sub
    End Class
    Public Class B : Inherits A
    Public Sub Ver()
    End Sub
    End Class




    امیدوارم ...
    من هم امیدوارم ... :)
    آخرین ویرایش به وسیله PC2st : سه شنبه 01 خرداد 1386 در 12:36 عصر دلیل: نمیدونم!

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

    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    به کمک کلاسهای دات نت :
    فرقی نکرد! من هم همیتن را گفتم، اگر دقت کنید میبینید که گفتم به وسیله اعضای کلاسس String قابل پیاده سازی است و اصلاً از اولش مشکلی نداشت و شما صرفاً کدش را آوردید.
    من صرفاً راه حل کوتاه برای تبدیلات معرفی کرده بودم.

    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    تا بحال سی# 2003 به عمرم ندیدم
    بابا دیگه گیر نده! پیر مرد آزاری میکنی! شما به اون نسخه #C که با Visual Studio.Net 2003 عرضه شد چه میگویید ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ شاید بگید C#‎.Net1 یا شاید C#‎.Net 2003 !!! یعنی واقعاً متوجه منظورم نشدید؟؟ بابا تو دیگه کی هستی!!!

    نقل قول نوشته شده توسط PC2st.ir مشاهده تاپیک
    در بیسیک.نت، این کار رو انجام دادم و گیر نداد.
    والا VB ما که یک خروار خطا میرزه روی سرمان آخرش هم کامپایل نمیکنه !!!!؟؟؟؟!!!!؟؟؟؟

    البته شاید ممکنه، احتمالاً به خاطر تنظیمات باشه! چون من همیشه بعد از نصب یک نرم افزار ساعت ها تو Option ها و Setting هایش چرخ میزنم و در مورد VS هم همین طور بود و سخت گیرانه ترین آپشن ها را همان ساعات اول نصب فعال کردم و تاحالا ندیدم که در این مورد گیر نده! پس شاید از همین مسئله باشه! نمیدانم!

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

    فرقی نکرد! من هم همیتن را گفتم، اگر دقت کنید میبینید که گفتم به وسیله اعضای کلاسس String قابل پیاده سازی است و اصلاً از اولش مشکلی نداشت و شما صرفاً کدش را آوردید.
    من صرفاً راه حل کوتاه برای تبدیلات معرفی کرده بودم.
    ببخشید، این رو متوجه نشده بودم... حواسم نبود!!
    شکستن کد و استفاده ترکیبی از اعضای کلاسس String
    فقط این مورد شکستن کدش رو قبول ندارم :)

    - برای مقایسه دو اشاره گر (شیء) در #C باید از == استفاده کرد و در VB.Net از Is
    این مورد رو الان دقت کردم... در سی# هم از is استفاده میشه.
    تصحیح : ببخشید، اشتباه کردم! این کلمه در سی# با بیسیک.نت فرق داره.

    از اینکه گفتم سی# 2003 به عمرم ندیدم، یعنی تا حالا باهاش کار نکردم و محیطش رو ندیدم! :d :)

    والا VB ما که یک خروار خطا میرزه روی سرمان آخرش هم کامپایل نمیکنه !!!!؟؟؟؟!!!!؟؟؟؟
    البته شاید ممکنه، احتمالاً به خاطر تنظیمات باشه!
    درسته، به خاطر تنظیمات بود... یه چیزی رو همین الان فهمیدم! اگه بخوایم برای اخطارها، برنامه کامپایل نشه ( همین موردی که گفتید ) :
    1. در بیسیک.نت، باید در قسمت My Project - Compile گزینه Threat all warnings as errors انتخاب بشه.
    2. در سی# باید در قسمت Properties - Building گزینه All از Threat warning as errors انتخاب بشه.
    آخرین ویرایش به وسیله PC2st : چهارشنبه 02 خرداد 1386 در 19:19 عصر دلیل: اضافه شدن چند مطلب! و ویرایش اشتباه !!!!

  29. #189

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

    نقل قول نوشته شده توسط DelphiAssistant مشاهده تاپیک
    از لحاظ ساختاری و فرم کلاسها #C و Delphi خیلی شبیه هستند (شاید بخاطر اینکه هر دو توسط یک نفر طراحی شده‌اند).
    [/list:u:40b5a19e0b]
    با سلام قصد جسارت نداشتم ولی بهتر نبود گفته بشه که توسط گروهی یا تیمی مشابه طراحی شده.

  30. #190
    کاربر تازه وارد آواتار Naruto
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    تهران
    پست
    79

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

    شما چی؟ شما مطمئن هستید که در پروژه های بزرگ با موارد زیر مشکلی پیدا نمیکنید؟
    Class...End Class
    Interface...End Interface
    Module...End Module
    IF...End IF
    For...Next
    بکار بردن هر کلمه برای هر چیزی، باید بخصوص باشه، مثلا یک کلاس حتما باید با کلمه End Class پایان پیدا کنه نه چیز دیگه.
    که موارد بالا در سی# به شکل زیر :
    class
    interface
    static class
    if
    for
    و چهار چوب هر یک از اونها با { و } معلوم میشه نه چیز دیگه!
    در ضمن من فکر میکنم که یافتن بلاکهای { و } خیلی راحت تر از یافتن End Class یا End Module یا End Sub و ... باشه.
    خوب آخر برنامه End If -End Sub -End Class ببینید بهتر از 60 تا آکولاد هستش.
    من #C را دوست دارم ولی این آکولادهاش چی بگم....

  31. #191

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

    نقل قول نوشته شده توسط DelphiAssistant مشاهده تاپیک
    خوب، حالم یک کم بهتر شد :wink:

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

    سپس برنامه بطور اتوماتیک کاربرد (نرم‌افزار) موردنظر بهمراه دیتابیس مربوطه تولید کرده و برنامه آماده را تحویل میدهد!

    برای کار با این پکیج مقدار دانشی که نیاز است در حد کمی فراتر از اپراتوری کامپیوتر میباشد!

    اسلایدها و توضیحات این پکیج در کنفرانس آمستردام مایکروسافت به نمایش گذاشته شده است :roll:
    با سلام
    اقای کرامتی الان سالها از این پست شما میگذره
    الان نظرتون چه تغییری کرده؟
    ایا مثل گذشته فکر میکنید؟
    ممنون

  32. #192

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

    سی شارپ و وی بی، Co-Evolution همدیگن؛ لذا مقایسه ی اونها و به رخ کشیدن مزایا و معایب یکی در برابر دیگری و بر عکس کار اساسا بیهوده ایه لذا پیشنهاد می کنم با طرح یک سری Off-Topic ها وقت خودتون و دیگران رو بی خود هدر ندین...

  33. #193

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

    کرامتی جان منتظر پاسخت هستم

  34. #194

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

    سلام

    آقا منم بدم نمیاد بدونم بعد از گذشت حدود 6 سال ( و به زودی 7 سال ) آیا هنوزم نظرات
    پاربجا هستند یا تغییراتی کردند ؟

    من هنوز نشونی از برنامه های فوق توی سیاست ماکروسافت ندیدم و در ضمن ، .NET به کل سیستم دولوپر هارو تغییر و ارتقا داده !

    موفق باشید

  35. #195

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

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

  36. #196
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1386
    پست
    55

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

    از این تاپیک اینطوری استنباط میشه که ممکنه جواب به یک سوال بیش از یک سال طول بکشه ولی به هر حال سوالم را در خصوص تفاوت سی شارپ و وی بی دات نت می پرسم:

    با توجه به اینکه دوستان بر این نظر متفق هستند که تفاوتهای عمده ای بین این دو زبان برنامه نویسی موجود نیست و فقط تفاوت بر سر سینتکس آنها می باشد در خصوص معماری سه لایه MVC آیا هر دوی این زبانها دارای قابلیت یکسان هستند . در مورد سی شارپ می دونم برای رجیستر کردن بخش VIEW لایه PL می توان به راحتی از متد RegisterMe استفاده نمود و یا از اینترفیس ها استفاده نمود آیا در VB.net هم امکاناتی از این دست برای پیاده سازی این نوع معماری قرار داده شده است؟

  37. #197
    کاربر دائمی آواتار modirmasool
    تاریخ عضویت
    اسفند 1388
    محل زندگی
    Home is where the heart is
    پست
    491

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

    سلام دوستان. نخودی وارد می شود.
    من بیچاره از اول با ویبی 6 شروع کردم حالا با توجه به این که این بحث ها مال چندین سال پیش هستش می خواستم ببینم الان که استادیو 10 اومده چیزی هم تغییر کرده یا نه. منظورم اینه که بر طبق پست های سال های قبل میتونم ویبی.نت رو شروع کنم یا نه؟
    ممنون.

  38. #198

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

    نقل قول نوشته شده توسط ehsan_ansaripoor مشاهده تاپیک
    با اجازه از بزرگترها بنده به عنوان یه ریز برنامه نویس تمام بحث این تاپیک را خوندم و چیزی که متوجه شدم این بود که عزیزان دلفی کار سنگ Delfi.Net را به سینه می زنند دوستان Vb کار سنگ Vb.Net و یکسری از دوستان هم ++C و C#‎‎ به نظر من در آینده نه چندان دور دیگه زبانی به نام Delfi.Net یا VB.Net و ++C و... وجود خارجی نخواهد داشت مجموعه عظیمی به نام Visual Stadio.Net به بازار خواهد آمد که در عمل کل زبانهای برنامه نویسی را در خود حل کرده باشد دوستان اگر الان هم Visual Stadio.Net را نگاه کنند موقع انتخاب زبان برنامه نویسی شاید صحبت بنده را تایید کنند
    یا حتی چیزی فراتر. بشه در یک متد یا تابع از چند زبان استفاده کرد. مثلا متغیر رو با ویژوال بیسیک تعریف کرد و با سی شارپ از اون استفاده کرد.

  39. #199

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

    خوب از قرار معلوم این تاپیک، یکی از پیر ترین تاپیک های این سایته. من یه پیام به آقای کرامتی برای ورود مجدد به این تاپیک ارسال کردم. راستی سال ها بعد از ساخته شدن این تاپیک ، ویژوال اف شارپ هم اومد که انگار زبان با حالیه. سبک هم هست. اما آیا واقعا مایکروسافت داره استعمار گری می کنه؟ آیا دات نت فری ورک می تونه همه ی زبان ها و رقبای مایکرو سافت رو به زانو در بیاره؟ آیا با اومدن ویندوز 7 و حتی ورژن های بالا تر ویندوز، win32 و win64 از بین میرن؟ (قرار بود 6 سال پیش برن!!!!)

  40. #200

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

    نقل قول نوشته شده توسط h.jaza مشاهده تاپیک
    سی شارپ و وی بی، Co-Evolution همدیگن؛ لذا مقایسه ی اونها و به رخ کشیدن مزایا و معایب یکی در برابر دیگری و بر عکس کار اساسا بیهوده ایه لذا پیشنهاد می کنم با طرح یک سری Off-Topic ها وقت خودتون و دیگران رو بی خود هدر ندین...
    این جمله را باید با آب طلا نوشت گذاشت بالای انجمن برنامه نویسی مبتنی بر Microsoft .Net Framework
    دانلود حسابخانه مانی، برنامه مدیریت درآمد و هزینه رایگان

    هر آنچه که هستیم، نتیجه افکاریست که در گذشته داشته ایم. (بودا)
    واحد فاصله «متر» نیست، «اشتیاق» است. اگر مشتاقش باشی حتی يک قدم هم فاصله ای دور است.

    رنگ رنگی | آموزش

صفحه 5 از 6 اولاول ... 3456 آخرآخر

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

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