c# - 将变量作为设置传递给类一次还是多次传递? C#

标签 c# performance parameters global-variables

是的,所以我正在寻找性能影响/代码风格的答案,所以这可能不是提问的正确位置。

我从数据库结果中设置了一个 DataRow“读取器”,然后将值提取到一个对象中。因为对于每个变量,我都想检查空值并返回一个“失败”值,如果它是空值,我必须执行检查:

try
{
    if (reader[property] != DBNull.Value)
    {
        var = reader[property];
    }
    else
    {
        var = failureValue;
    }
}
catch (ArgumentException e)
{
     // DISPLAY ERROR ABOUT NO VALUE CALLED Property
     var = failureValue;
}
catch (Exception e)
{
    // DISPLAY GENERIC ERROR ABOUT VALUE
    var = failureValue;
}

在我目前的情况下,我在一个类中执行了 47 次检查,所以我将代码移到一个方法中,然后调用它。重要的是要注意,我将它放在我的数据访问类的父类(super class)中,这样每个人都可以使用它。

我现在的问题是,当我创建这个方法时,我最初在每次调用该方法时都传入了完整的 DataRow“reader”。我应该在父类(super class)中创建一个静态变量并在设置“阅读器”时设置它吗?因此,允许该方法访问自身内部的静态变量,而不必每次都执行完整读取器的传递?还是像 this thread 这样改过来比较慢建议?

编辑:正如第一个答案和评论所质疑的那样,变量确实需要是静态的,因为父类(super class)本身从未初始化,只是继承自。

最佳答案

从性能的角度来看,如果您一次又一次地传递读取器或将其存储在本地变量中,它根本没有区别(可能是几纳秒,但您不会在意)。与你提到的帖子中所说的相反,在方法中或类本身中声明对象之间,对象的存储位置没有区别。是存储在栈上还是堆上,通过其他方式判断。

但是,从 API 的角度来看,您应该问问自己,您的类的所有 成员(或至少几个)是否需要依赖项(在您的情况下是读者),还是只需要一个。我建议在您真正需要它们的地方传递依赖项。

另一种方法是在第一次调用您的方法之前通过 setter 设置依赖关系:

var instance = new MyType();
instance.SetReader(reader);
for(int i = 0; i < 100; i++) instance.DoSomething();

根据您的编辑:仅因为您的基类未实例化并不意味着它的所有成员都应该是static。实际上,无论何时创建其子类之一的新实例(虽然可以将其转换为基类),您的基类都会被实例化。因此,您可以只使用由所有派生类继承的普通实例成员。

你可以看看dependecy injection .

关于c# - 将变量作为设置传递给类一次还是多次传递? C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41763642/

相关文章:

C# - 从异步方法回调更新变量 BY REF - WebClient 类

javascript - 在事件处理程序中使用 ReactDOM.render 以避免渲染昂贵的组件

search - VIM 中的自定义搜索模式

javascript - 为什么为参数设置默认值在我的 JavaScript 中不起作用?

c# - 如何将 UserControl 中的 DependencyProperty 绑定(bind)到 DataContext 属性? Windows 应用商店

c# - Exchange Server 2013 电子邮件驱动程序

c# - 是否保证在调用链式构造函数之前评估代码契约?

.net - 为什么第一个 WCF 客户端调用很慢?

php数组与数组键和键数组的区别?

java - 如何将带有数组值的私有(private)二维枚举传递给另一个类?