我在C#工作一些练习,我不明白大局。如果这些应该用Java实现,我就没有问题。但我是C#的新手,所以我混淆了一些东西,我不知道te结构应该是什么样子。我读了一些解释,如: http://www.codeproject.com/Articles/15360/Implementing-IDisposable-and-the-Dispose-Pattern-P和 http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx
我有第一个类,我在哪里创建LinkedList,它的类型是节点,所以: LinkedList linkedlist = new LinkedList 我通过一些方法在链表中创建了一些节点,这里也是方法打印,它打印来自链表的元素。
我的“对象”类是Node,其中我有构造函数,属性以及getter和setter。我还有这里的virtula方法打印,我不知道我在这个方法中放了什么shoudl,因为这个节点类只是抽象类,在这里我必须实现IDisposable方法:
public void Dispose() {}
protected virtual void Dispose(bool disposing) {}
在这里,我不解释为什么要使用IDispose?在所有示例中,我看到它已被用于访问某些文件和处理图片。在一些例子中,我看到:
public interface IDisposable
{
void Dispose();
}
我不知道是否必须把它放在一个新的类中,我把它放在同一个类中,甚至不实现它。
而且我创建了使用超类节点的子类NodeLong和Nodestring,我放了一些新的属性和setter和getter。我也用过print方法。 我也不懂genercis。
Linearcollection类:
public class LinearCollection{
void Main(string[] args){
LinkedList<Node> linkedlist = new LinkedList<Node>
//calling methods for adding some elements, deleting, getting some elements
}
//implemented methods
public void Print(){
foreach( NodeElement item in linkedList){
// what to do??
}
}
My Nodeelemts课程:
public abstract class Node:{
private bool _disposed;
//constructors
//properties, set, get ex:
private Object data;
public Object _data{
get{
rethurn this._data;
}
set{
this._data=value;
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing){
if(!_disposed){
if(disposing){
//disposed managed resources
}
//
}
_disposed = true;
//
}
virtual public void Print(){
//what to implemetn?
}
}
//stil the same file
public class NodeString : Node{
//prop
public string typeOfElement{ get set ...}
//new constructor where is involved new property
public overrride void Print()
{
Console.WriteLine(_data.ToString());
base.Print();
}
}
public class NodeLong : Node{
//prop
public long typeOfElement{ get set ...}
//new constructor where is involved new property
public overrride void Print()
{
Console.WriteLine(_data.ToString());
base.Print();
}
}
如果我制作NodeLang:IClonable比我不能制作NodeLang:Node。
我的说明说我必须在两个子类中使用IClonable方法,我不知道应该如何使用它?在Node类中也使用IDisposable,怎么样?我希望我能理解吗?
所以压轴问题是它应该如何看起来像我的类,子类,IDisposable和ICloneable?
答案 0 :(得分:0)
有些时候,实现IDisposable
的类有一个克隆方法是有意义的,在这种情况下,无论代码调用克隆方法,对象都有责任确保Dispose
将调用新副本(通过调用Dispose
本身,或将责任移交给其他代码)。在某些情况下,有一个带有Dispose
方法的容器类在其中存储的每个成员上调用Dispose
是有意义的,尽管在大多数情况下,容器类的目的是围绕这种处置并且没有理由支持任何类型的克隆。
除非Node
课程会暴露给外界,否则我没有看到实施IDisposable
的目的。即使持有链表的类是一个处理聚合器(接受其有效生命周期将短于其自身的对象,然后在调用自己的Dispose
方法时清除它们的东西)和每个节点但最后一个不仅会保留需要清理的东西,还会知道另一个节点。在下一个节点上调用节点Dispose
将导致不必要的递归,如果节点太多则导致崩溃。另一种方法是让Node
类实现Node DisposeAndReturnNext()
方法,这将导致Node
处理它所知道的所有资源,然后返回对下一个节点的引用。然后呼叫者可以使用以下内容:
while(nodeToDispose != null)
nodeToDispose = nodeToDispose.DisposeAndReturnNext();
这里很明显,DisposeAndReturnNext
方法不会出现处理下一个节点(及其后代),即使它知道它们需要处理。虽然Node
可以定义一个包含上述循环的Dispose
方法,但是第一个列表项的处理可以处理公共Dispose
方法并且每个方法都有其他项目的处理由上面的循环处理似乎相当icky。最好有一个循环,在封闭的类中,处理每个人的处理。