加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#通用方法/多态性

发布时间:2020-12-16 00:23:31 所属栏目:百科 来源:网络整理
导读:我有以下用于关闭流的代码. 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(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()
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读