نمایش نتایج 1 تا 17 از 17

نام تاپیک: به نظر شما این کد چه مشکلی داره؟

  1. #1

    به نظر شما این کد چه مشکلی داره؟

    به نظر شما این کد چه مشکلی داره؟

    Dim oObj As New cSimpleClass

    Set oObj = Nothing

    If oObj Is Nothing Then
    .
    .
    .
    .
    End If

  2. #2
    کاربر دائمی آواتار jannati
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    تهران
    پست
    728
    به نظر من اشکالش اینه که شرط همواره اجرا میشه. :roll:

  3. #3
    کاربر دائمی
    تاریخ عضویت
    فروردین 1382
    محل زندگی
    تهرانسر_ فاز5
    پست
    317
    من فکر کنم که cSimpleClass نشه مقدار Nothing ریخت
    البته وی بی من پریده من توی وی بی تست نکردم حدس زدم

  4. #4
    سلام
    به نظر منم اشکال در شرطشه؟!

  5. #5

    سلام، اشکال برنامه:

    اشکال برنامه استفاده از کلمه‌ی new در تعریف متغیر است. با این تعریف دیگر مقدار قابل قبولی در متغیر ذخیره نمی‌شود. باید کلمه‌ی new را برداشت و در یک سطر دیگر مقداردهی را با Set oObj = New cSimpleClass انجام داد.

  6. #6
    در این کد ابتدا شی در VB تعریف شده و بلافاصله با استفاده از لغت کلیدی New نمونه ای از شی ایجاد شده است. اما در حقیقت تا زمانی که اولین ارجاع به آن صورت نگیرد ساخته نمی شود. بنابراین وقتی که می خواهیم آن را با استفاده از Nothing از بین ببریم شی تازه ساخته میشود و کد نوشته شده در IF هرگز اجرا نمیشود. در صورتی که کد پاکسازی شی در IF باشد به دلیل اجرا نشدن حافظه اشغال شده توسط شی آزاد نمی شود و هدر می رود. در صورتی که شی ما ارجاعی به اشیای دیگر در خودش داشته باشد میزان حافظه هدر رفته بالا می رود و می تواند باعث یک خطای General Protection Fault شود.

    توضیح: مشکلاتی از این قبیل در .NET رفع شده اند

  7. #7
    nemidonam new onja chekar mikone dogole

  8. #8
    Voldemort دمت گرم

  9. #9

    اشتباه

    سلام من فکر میکنم که وقتی که کلاس جدید ایجاد شد با مساوی قرار دادن آن با
    nothing آزاد میشود بنابراین دیگر کلاسی وجود ندارد پس شرط بعدی نادرست است.

  10. #10
    آقای ahmad2005 کلاس تعریف شده اما مقدار Nothing را درخود دارد.

  11. #11
    کاربر جدید
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    salman_s_mp@yahoo.com
    پست
    21

    با سلام - کلمه new را حذف کنید تا مشکلتان حل شود

    نقل قول نوشته شده توسط jannati
    به نظر من اشکالش اینه که شرط همواره اجرا میشه. :roll:

    شما در واقع با SET NOTHING کردن مقدار درون متغییرتان را empty می کنید. به نظرم قطعه کد زیر کمکتان کند.

    Dim oObj As Form1

    Set oObj = Nothing

    If oObj Is Nothing Then
    MsgBox "111"
    Else
    MsgBox "222"
    End If

  12. #12
    شما oObj را همواره nothing تعریف می کنی و در این صورت شرط تکرار می شود

  13. #13
    به نظر من جون obj=nothing شده در واقع دسترسی به اون از بین میره و بنابراین شرط هیچگاه اجرا نمیشه

    ::نوشتن::

  14. #14
    کاربر دائمی آواتار Beyondsoft
    تاریخ عضویت
    تیر 1384
    محل زندگی
    ایران
    پست
    336
    سرتاپاش اشکال هست
    یه چیزی بنویسید
    که یه اشکال داشته باشه
    در ضمن
    اشکالش هم یه ذره سخت باشه

  15. #15
    کاربر دائمی
    تاریخ عضویت
    تیر 1384
    محل زندگی
    localhost
    پست
    269
    خط دوم باید Set oObj =New Nothing بشه :موفق:

  16. #16
    نقل قول نوشته شده توسط Voldemort
    به نظر شما این کد چه مشکلی داره؟

    Dim oObj As New cSimpleClass

    Set oObj = Nothing

    If oObj Is Nothing Then
    .
    .
    .
    .
    End If
    به نظر من که اشکالی وجود نداره اگه اینطوری باشه و یا هم من درست نفهمیدم :


    Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim obj As CMyClass
    obj = Nothing
    If obj Is Nothing Then
    MsgBox("Nothing")
    End If
    End Sub

    End Class

    Public Class CMyClass

    Private intX As Integer

    Public Sub New()
    Me.intX = 10
    End Sub

    End Class

  17. #17
    دوستان عزیز من جواب صحیح رو در پست شماره 6 دادم. نمی دونم دیگه برای چی دارید این تاپیکو ادامه میدید؟


    در این کد ابتدا شی در VB تعریف شده و بلافاصله با استفاده از لغت کلیدی New نمونه ای از شی ایجاد شده است. اما در حقیقت تا زمانی که اولین ارجاع به آن صورت نگیرد ساخته نمی شود. بنابراین وقتی که می خواهیم آن را با استفاده از Nothing از بین ببریم شی تازه ساخته میشود و کد نوشته شده در IF هرگز اجرا نمیشود. در صورتی که کد پاکسازی شی در IF باشد به دلیل اجرا نشدن حافظه اشغال شده توسط شی آزاد نمی شود و هدر می رود. در صورتی که شی ما ارجاعی به اشیای دیگر در خودش داشته باشد میزان حافظه هدر رفته بالا می رود و می تواند باعث یک خطای General Protection Fault شود.

    توضیح: مشکلاتی از این قبیل در .NET رفع شده اند

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

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