به نظر شما این کد چه مشکلی داره؟
Dim oObj As New cSimpleClass
Set oObj = Nothing
If oObj Is Nothing Then
.
.
.
.
End If
به نظر شما این کد چه مشکلی داره؟
Dim oObj As New cSimpleClass
Set oObj = Nothing
If oObj Is Nothing Then
.
.
.
.
End If
به نظر من اشکالش اینه که شرط همواره اجرا میشه. :roll:
من فکر کنم که cSimpleClass نشه مقدار Nothing ریخت
البته وی بی من پریده من توی وی بی تست نکردم حدس زدم
اشکال برنامه استفاده از کلمهی new در تعریف متغیر است. با این تعریف دیگر مقدار قابل قبولی در متغیر ذخیره نمیشود. باید کلمهی new را برداشت و در یک سطر دیگر مقداردهی را با Set oObj = New cSimpleClass انجام داد.
در این کد ابتدا شی در VB تعریف شده و بلافاصله با استفاده از لغت کلیدی New نمونه ای از شی ایجاد شده است. اما در حقیقت تا زمانی که اولین ارجاع به آن صورت نگیرد ساخته نمی شود. بنابراین وقتی که می خواهیم آن را با استفاده از Nothing از بین ببریم شی تازه ساخته میشود و کد نوشته شده در IF هرگز اجرا نمیشود. در صورتی که کد پاکسازی شی در IF باشد به دلیل اجرا نشدن حافظه اشغال شده توسط شی آزاد نمی شود و هدر می رود. در صورتی که شی ما ارجاعی به اشیای دیگر در خودش داشته باشد میزان حافظه هدر رفته بالا می رود و می تواند باعث یک خطای General Protection Fault شود.
توضیح: مشکلاتی از این قبیل در .NET رفع شده اند
nemidonam new onja chekar mikone dogole
Voldemort دمت گرم
سلام من فکر میکنم که وقتی که کلاس جدید ایجاد شد با مساوی قرار دادن آن با
nothing آزاد میشود بنابراین دیگر کلاسی وجود ندارد پس شرط بعدی نادرست است.
آقای ahmad2005 کلاس تعریف شده اما مقدار Nothing را درخود دارد.
نوشته شده توسط jannati
شما در واقع با SET NOTHING کردن مقدار درون متغییرتان را empty می کنید. به نظرم قطعه کد زیر کمکتان کند.
Dim oObj As Form1
Set oObj = Nothing
If oObj Is Nothing Then
MsgBox "111"
Else
MsgBox "222"
End If
شما oObj را همواره nothing تعریف می کنی و در این صورت شرط تکرار می شود
به نظر من جون obj=nothing شده در واقع دسترسی به اون از بین میره و بنابراین شرط هیچگاه اجرا نمیشه
::نوشتن::
سرتاپاش اشکال هست
یه چیزی بنویسید
که یه اشکال داشته باشه
در ضمن
اشکالش هم یه ذره سخت باشه
خط دوم باید Set oObj =New Nothing بشه :موفق:
به نظر من که اشکالی وجود نداره اگه اینطوری باشه و یا هم من درست نفهمیدم :نوشته شده توسط Voldemort
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
دوستان عزیز من جواب صحیح رو در پست شماره 6 دادم. نمی دونم دیگه برای چی دارید این تاپیکو ادامه میدید؟
در این کد ابتدا شی در VB تعریف شده و بلافاصله با استفاده از لغت کلیدی New نمونه ای از شی ایجاد شده است. اما در حقیقت تا زمانی که اولین ارجاع به آن صورت نگیرد ساخته نمی شود. بنابراین وقتی که می خواهیم آن را با استفاده از Nothing از بین ببریم شی تازه ساخته میشود و کد نوشته شده در IF هرگز اجرا نمیشود. در صورتی که کد پاکسازی شی در IF باشد به دلیل اجرا نشدن حافظه اشغال شده توسط شی آزاد نمی شود و هدر می رود. در صورتی که شی ما ارجاعی به اشیای دیگر در خودش داشته باشد میزان حافظه هدر رفته بالا می رود و می تواند باعث یک خطای General Protection Fault شود.
توضیح: مشکلاتی از این قبیل در .NET رفع شده اند