比如我定义了以下这样的类
public class A
{
public int ID
{
get;
set;
}
}public A NewA=new A();public class B
{
public A Quote=NewA;
}public B NewB=new B();当我释放NewA整个对象时,怎么使NewB中的Quote引用变为Null?有没有C#现成的机制可用?
目前我采用的是在A类里定义相关释放通知事件,在B类引用时注册通知事件,接到通知后设置Quote为null.
public class A
{
public int ID
{
get;
set;
}
}public A NewA=new A();public class B
{
public A Quote=NewA;
}public B NewB=new B();当我释放NewA整个对象时,怎么使NewB中的Quote引用变为Null?有没有C#现成的机制可用?
目前我采用的是在A类里定义相关释放通知事件,在B类引用时注册通知事件,接到通知后设置Quote为null.
{
private WeakReference quote = new WeakReference(NewA);
public A Quote
{
get
{
object value = quote.Target;
return value != null ? (A)value : null;
}
}
}
你怎么“释放”。只要还有对象引用,就不可能“释放”,除非CLR有bug。
msdn.microsoft.com/zh.../system.windows.forms.control.isdisposed.aspx
当此属性返回true,则控件被释放并且不能再由有效的Windows 控件引用。 即使控件的实例已释放,该实例仍保留在内存中,直到通过垃圾回收将其移除为止。 控件被 ...
Control.IsDisposed 属性(System.Windows.Forms) - MSDN - Microsoft
msdn.microsoft.com/.../system.windows.forms.control.isdisposed(v=vs.8...
当该属性返回true 时,控件被释放,不再能作为有效的Windows 控件引用。尽管控件的实例已被释放,但是,它仍保留在内存中,直到通过“垃圾回收”将其从内存中移除 ...
CommunicationObject.IsDisposed 属性(System ... - MSDN - Microsoft
msdn.microsoft.com/.../system.servicemodel.channels.communicationobj...
版本信息 .NET Framework. 受以下版本支持:4.5、4、3.5、3.0 .NET Framework Client Profile. 受以下版本支持:4、3.5 SP1. 可移植类库. 受以下版本支持:可移植类库 ...
ChangeMonitor.IsDisposed 属性(System ... - MSDN - Microsoft
msdn.microsoft.com/.../system.runtime.caching.changemonitor.isdispose...
获取一个值,该值指示释放ChangeMonitor 类的派生实例。
AnnotationStore.IsDisposed 属性(System ... - MSDN - Microsoft
msdn.microsoft.com/.../system.windows.annotations.storage.annotationst...
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带SP1 或更 ...
PrintProperty.IsDisposed 属性(System.Printing ... - MSDN - Microsoft
msdn.microsoft.com/.../system.printing.indexedproperties.printproperty.i...
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带SP1 或更 ...
PrintProperty.IsDisposed 属性(System.Printing ... - MSDN - Microsoft
msdn.microsoft.com/.../system.printing.indexedproperties.printproperty.i...
... void set_IsDisposed (boolean disposing). JScript. 复制. protected function get IsDisposed () : boolean protected function set IsDisposed (disposing : boolean).
XamlReader.IsDisposed 属性(System.Xaml) - MSDN - Microsoft
msdn.microsoft.com/.../system.xaml.xamlreader.isdisposed(v=vs.110).as...
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带SP1 或更 ...
PresentationSource.IsDisposed 属性(System ... - MSDN - Microsoft
msdn.microsoft.com/.../system.windows.presentationsource.isdisposed(v...
当重写在派生类中,获取在其中声明的值对象是否被释放。
IDisposable.Dispose Method (System) - MSDN - Microsoft
msdn.microsoft.com/en-us/.../system.idisposable.dispose.aspx
翻译此页
Use this method to close or release unmanaged resources such as files, streams, and handles held by an instance of the class that implements this interface.随便google,你会发现很多类都是这么处理的。哪怕你不会,看着微软这么用,学也学会了啊。只要你写的程序够多。
msdn.microsoft.com/zh.../system.windows.forms.control.isdisposed.aspx
当此属性返回true,则控件被释放并且不能再由有效的Windows 控件引用。 即使控件的实例已释放,该实例仍保留在内存中,直到通过垃圾回收将其移除为止。 控件被 ...
Control.IsDisposed 属性(System.Windows.Forms) - MSDN - Microsoft
msdn.microsoft.com/.../system.windows.forms.control.isdisposed(v=vs.8...
当该属性返回true 时,控件被释放,不再能作为有效的Windows 控件引用。尽管控件的实例已被释放,但是,它仍保留在内存中,直到通过“垃圾回收”将其从内存中移除 ...
CommunicationObject.IsDisposed 属性(System ... - MSDN - Microsoft
msdn.microsoft.com/.../system.servicemodel.channels.communicationobj...
版本信息 .NET Framework. 受以下版本支持:4.5、4、3.5、3.0 .NET Framework Client Profile. 受以下版本支持:4、3.5 SP1. 可移植类库. 受以下版本支持:可移植类库 ...
ChangeMonitor.IsDisposed 属性(System ... - MSDN - Microsoft
msdn.microsoft.com/.../system.runtime.caching.changemonitor.isdispose...
获取一个值,该值指示释放ChangeMonitor 类的派生实例。
AnnotationStore.IsDisposed 属性(System ... - MSDN - Microsoft
msdn.microsoft.com/.../system.windows.annotations.storage.annotationst...
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带SP1 或更 ...
PrintProperty.IsDisposed 属性(System.Printing ... - MSDN - Microsoft
msdn.microsoft.com/.../system.printing.indexedproperties.printproperty.i...
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带SP1 或更 ...
PrintProperty.IsDisposed 属性(System.Printing ... - MSDN - Microsoft
msdn.microsoft.com/.../system.printing.indexedproperties.printproperty.i...
... void set_IsDisposed (boolean disposing). JScript. 复制. protected function get IsDisposed () : boolean protected function set IsDisposed (disposing : boolean).
XamlReader.IsDisposed 属性(System.Xaml) - MSDN - Microsoft
msdn.microsoft.com/.../system.xaml.xamlreader.isdisposed(v=vs.110).as...
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(不支持服务器核心角色), Windows Server 2008 R2(支持带SP1 或更 ...
PresentationSource.IsDisposed 属性(System ... - MSDN - Microsoft
msdn.microsoft.com/.../system.windows.presentationsource.isdisposed(v...
当重写在派生类中,获取在其中声明的值对象是否被释放。
IDisposable.Dispose Method (System) - MSDN - Microsoft
msdn.microsoft.com/en-us/.../system.idisposable.dispose.aspx
翻译此页
Use this method to close or release unmanaged resources such as files, streams, and handles held by an instance of the class that implements this interface.随便google,你会发现很多类都是这么处理的。哪怕你不会,看着微软这么用,学也学会了啊。只要你写的程序够多。
那也只是对象本身对外表示我释放了,不要用我了的意思吧?只要引用者没有使用到该对象,也就不会去检查它的IsDisposed 属性,那么这个对象实际还是存在于内存中。
请问这个Null项如何去除?
请问这个Null项如何去除?
给默认值啊。
请问这个Null项如何去除?
给默认值啊。
你没看懂我的问题。
ListQuote原来有4个子项,如果其中一个子项本身要释放掉,先设置为Null了,当然引用者ListQuote中的某个子项也变为null,但引用关系还在,那个子项即使设置为null,也是被回收的。所以必须想个办法使ListQuote变为3个子项,把那个Null的欲释放子项从集合里删除。不知道我这样说,你是否明白我的问题了。
请问这个Null项如何去除?
给默认值啊。
你没看懂我的问题。
ListQuote原来有4个子项,如果其中一个子项本身要释放掉,先设置为Null了,当然引用者ListQuote中的某个子项也变为null,但引用关系还在,那个子项即使设置为null,也是被回收的。所以必须想个办法使ListQuote变为3个子项,把那个Null的欲释放子项从集合里删除。不知道我这样说,你是否明白我的问题了。
写错了:
也是不会被回收的