您的位置:首页 > 编程语言 > C#

c# 接口 IDisposable

2017-07-14 00:00 197 查看
using,实现了IDisposable接口的对象可以使用using进行资源声明,出了using的作用域以后自动调用Dispose方法。

Dispose和Close的区别:实现了IDisposable接口必须定义dispose方法,但不一定有close方法很多dispose的实现都是调用close方法,dqlConnection close以后还能重新open,但是dispose以后就不能再用。

static void Main(string[] args)
{

//实现了IDisposable的接口的类可以使用using 进行资源管理。
using (bird b = new bird())
{
b.fly();
b.walk();
}
Console.WriteLine("////////////////////");
using (bird b2 = new bird()) ;
}
public interface flyable
{
void fly();
}
public interface runable
{
void walk();
}
class bird : flyable, runable,IDisposable
{
public void Dispose()
{
Console.WriteLine("啊,摔了");
}

public void fly()
{
Console.WriteLine("我能飞");
}

public void walk()
{
Console.WriteLine("能蹦跶");
}
}




close不一定有,比如bird这个类就没有。close就像门一样被关了,可以从新打开,但是dispose后路都给你炸了,你必须从新建。

foreach:实现了IEnumerable接口的对象都可以使用foreach进行遍历。

using System.Runtime.InteropServices;

namespace System.Collections
{
//
// 摘要:
//     支持对非泛型集合的简单迭代。
[ComVisible(true)]
[Guid("496B0ABF-CDEE-11d3-88E8-00902754C43A")]
public interface IEnumerator
{
//
// 摘要:
//     获取集合中的当前元素。
//
// 返回结果:
//     集合中的当前元素。
object Current { get; }

//
// 摘要:
//     将枚举数推进到集合的下一个元素。
//
// 返回结果:
//     如果枚举数成功地推进到下一个元素,则为 true;如果枚举数越过集合的结尾,则为 false。
//
// 异常:
//   T:System.InvalidOperationException:
//     在创建了枚举数后集合被修改了。
bool MoveNext();
//
// 摘要:
//     将枚举数设置为其初始位置,该位置位于集合中第一个元素之前。
//
// 异常:
//   T:System.InvalidOperationException:
//     在创建了枚举数后集合被修改了。
void Reset();
}
}

系统定义的接口都是I开头的。

这个接口里面定义了三个东西,

object Current { get; }

这个是一个属性,一个只读属性。

bool MoveNext();

这个肯定是移动下一个数据,这个返回值是什么意思呢?就是判断有没有下一个数据。

只要有这两个方法就能对一堆数据进行遍历了。

所以调用这个能进行遍历了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# IDisposable