C#通用方法/多态性

我有以下用于关闭流的代码.

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()因为Object类没有实现这样的方法.
所以我想知道你们中是否有人知道如何解决它.

谢谢你的时间,
凯文

解决方法:

所有这些’流’都是disposable,所以使用Dispose()而不是Close():

void CloseStream(IDisposable s)
{
    if (s != null)
        s.Dispose();
}

还要考虑使用内置的功能.Net Framework – using语句将自动处理一次性对象,而无需对CloseStream进行任何额外调用:

using(StreamReader reader = File.OpenText(path))// create disposable here
{
    // use disposable
}

此代码将自动检查一次性是否为空,并在使用块结束时将其丢弃.上面的代码块将编译成:

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()
}
上一篇:java – 关于多态和重载的问题


下一篇:java – 如果重写方法的返回类型是原始的(例如double),我们可以更改重写方法的返回类型(例如int,char)吗?