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();
}