C#通用方法/多态性
我使用以下代码关闭流C#通用方法/多态性,c#,generics,polymorphism,C#,Generics,Polymorphism,我使用以下代码关闭流 void CloseStream(Stream s) { if (s != null) s.Close(); } void CloseStream(HttpWebResponse s) { if (s != null) s.Close(); } void CloseStream(StreamReader s) { if (s != null) s.Close(); } 代码工作得非常完美,但如果可
void CloseStream(Stream s)
{
if (s != null)
s.Close();
}
void CloseStream(HttpWebResponse s)
{
if (s != null)
s.Close();
}
void CloseStream(StreamReader s)
{
if (s != null)
s.Close();
}
代码工作得非常完美,但如果可能的话,我想重构这3个方法。
理想情况下,该方法如下所示:
void CloseStream(Object obj)
{
obj.Close();
}
但是我不能执行obj.Close(),因为对象类没有实现这样的方法。
所以我想知道你们中是否有人知道如何解决这个问题
谢谢你抽出时间,
Kevin所有这些“流”都是,所以请使用Dispose()
而不是Close()
:
也考虑使用内置函数.NETFramework -语句将自动处理一次性对象,而不需要附加调用<代码> CouthSeRAM< <代码>:
using(StreamReader reader = File.OpenText(path))// create disposable here
{
// use disposable
}
此代码将自动检查一次性文件是否不为null
,并在末尾使用
块对其进行处理。上述代码块将编译为:
StreamReader reader = File.OpenText(path);
try
{
// use disposable
}
finally // will be executed even in case of exception
{
if (reader != null)
reader.Dispose(); // internally calls Close()
}
这三个类都实现了
IDisposable
,而Dispose
方法关闭了底层流,因此您可以调用它:
void CloseStream(IDisposable s)
{
if (s != null)
s.Dispose();
}
它们都应该实现
IDisposable
,它实现Dispose
(与Close
的工作相同)
因此,请尝试:
void CloseStream(IDispsable obj)
{
obj.Dispose();
}
谢谢,正是我需要的:)
void CloseStream(IDispsable obj)
{
obj.Dispose();
}