如何确保在 C# 中使用 use 标记

How to ensure the use tag using in C#

有没有什么办法可以保证一个class总是被用作using而不是被正常实例化

想要的方式 using(var db = new DbContext()) {}

普通方式var db = new DbContext();

我想以某种方式阻止实例化通用表单。 我已经知道要使用 'using' 必须执行 IDisposable

不,你不能。


但是,如果这是一个选项,您可以编写方法来确保没有人甚至不必实例化您的对象并在处理它时出错:

例如:

var instance = new YourObject();

var result = instance.MethodCallNeeeded(17);

// oops, no .Dispose called, basic mistake

向用户提供功能的另一种方式如何:

public static TResult UseYourObject<T>(Func<YourObject, TResult> func)
{
    using(var x = new YourObject())
        return func(x);
}

仅提供此方法意味着人们不能忘记using,因为他们不负责对象的创建和处置。

用法为:

var result = ClassName.UseYourObject(instance => instance.MethodCallNeeeded(17));

也许最好的选择是:与后辈一起进行代码审查和静态代码分析。 他们如何做。这就是为什么他们是小辈。