方法C#
在C#2010(.Net 4)中,有没有一种不使用try finally块来处理方法变量的方法 故事: 我有几个文件处理程序方法。每个处理程序(方法)可以在执行中间中止。 我喜欢在退出方法之前处理所有方法的对象。 为每个处理程序编写dispose方法的选项不是选项 多谢各位 这表明了总体思路: `公共静态类比较 { 私有静态布尔比较MLS(…) { //根据4个条件,在3个出口点中放置7个物体方法C#,c#,dispose,filestream,C#,Dispose,Filestream,在C#2010(.Net 4)中,有没有一种不使用try finally块来处理方法变量的方法 故事: 我有几个文件处理程序方法。每个处理程序(方法)可以在执行中间中止。 我喜欢在退出方法之前处理所有方法的对象。 为每个处理程序编写dispose方法的选项不是选项 多谢各位 这表明了总体思路: `公共静态类比较 { 私有静态布尔比较MLS(…) { //根据4个条件,在3个出口点中放置7个物体 //General method flow: //1. init p
//General method flow:
//1. init part of the object
//2. if(!<condition1>)
//disposed objects
//exit method
//3. perform some actions
//4. init some of the other objects
//2. if(!<condition2>)
//disposed objects
//exit method
//and so on...
}
private static bool CompareJpgs(...)
{
//has 12 object to be disposed in 10 exit points acordding to 4 conditions
}
private static bool CompareBitMaps(...)
{
//has 5 object to be disposed in 3 exit points acordding to 4 conditions
}
private static bool CompareTxts(...)
{
//has 12 object to be disposed in 10 exit points acordding to 4 conditions
}
}`
//通用方法流程:
//1.初始化对象的一部分
//2.如果(!)
//处置对象
//退出方法
//3.执行一些操作
//4.初始化其他一些对象
//2.如果(!)
//处置对象
//退出方法
//等等。。。
}
私有静态布尔比较PGS(…)
{
//根据4个条件,在10个出口点中放置12个物体
}
私有静态布尔比较映射(…)
{
//根据4个条件,在3个出口点中放置5个物体
}
私有静态bool CompareTxts(…)
{
//根据4个条件,在10个出口点中放置12个物体
}
}`
我还有另外7种比较方法我会将该方法放在一个impiment对象上,并使用在finally块中调用this.dispose()?有关如何使用和为什么使用的完整说明,请参阅此处。一个样本是
using (MyDisposableType disposable1 = GetDisposable1(), disposable2 = GetDisposable2() /*,...*/)
{
//your actions
}
从using
块退出后,将处理在其头中声明的所有一次性对象
如果一次性对象的类型不同,则可以使用嵌套的和s:
using (MyDisposableType1 disposable1 = GetDisposable1())
{
using (MyDisposableType2 disposable2 = GetDisposable2())
{
//more usings if needed, and then your actions
}
}
为什么它不是一个选项?请提供一个示例,它是一个你称之为方法的类吗?如果你能在这里放一些代码就好了,否则有太多的方法来抽象处理句柄…是的,你必须创建一些抽象来这样做,它不会自动完成。你说的“中止”是什么意思?Oded-这不是一个选项,因为我有太多的方法,每个方法都有完全不同的对象。更正,所有IDisposable实现对象都将调用其.Dispose()方法。在其他情况下非常有用,而不仅仅是资源释放。=)对,这更准确:)但是不可IDisposable对象呢?如果可能的话,让它们IDisposable
。如果没有,则将它们收集到IDisposable
类中,该类在Dispose
中处理这些对象,并在方法中使用这个新类。可能,您将能够提出一个或一小部分这样的类,这些类将满足您所有不同方法的需要。一般来说,您所说的处理不可IDisposable
的东西是什么意思?这是一条规则,如果类的对象在销毁时可能需要额外的清理(GC作业不够),那么该类应该实现IDisposable
。你的问题让我觉得这个规则在你的设计中被打破了。Microsoft和可靠的第三方库不会违反此规则,因此我认为您可以控制您的类,因此可以使它们IDisposable
。我不想使用try finally block。