c# - 在属性内执行初始化是一种好习惯吗?

标签 c# methods properties design-guidelines

我有一个 PluginProvider 类,它使用 PluginLoader 组件从文件系统加载插件(托管/ native )。在 PluginProvider 类中,当前定义了一个名为“PluginTypes”的属性,它调用 get() 上的“InitializePlugins”实例方法。

class PluginProvider
 {
   IEnumerable<IPluginType> PluginTypes
   {
     get
     {
        //isInitialized is set inside InitializePlugins method
        if(!isInitialized)
        {
           InitializePlugins(); //contains thread safe code
        }
        //_pluginTypes is set within InitializePlugins method
        return _pluginTypes;
     }
   }
 }

我正在考虑重构这段代码。我想知道这种初始化是否适合在属性中进行。我知道不能在属性(property)中进行繁重的操作。但是当我检查这个链接时:http://msdn.microsoft.com/en-us/library/vstudio/ms229054.aspx ,发现这个“特别是,访问网络或文件系统的操作(初始化一次除外)最有可能是方法,而不是属性。”。现在我有点困惑。请帮忙。

最佳答案

  • 如果您想尽可能地延迟初始化并且您不知道何时您的一个或多个属性将被调用,那么您正在做的事情很好。
  • 如果您想延迟并且可以控制第一次调用您的属性的时间,那么您可能希望将您的方法 InitializePlugins() 公开并在访问该属性之前显式调用它.此选项还开启了异步初始化的可能性。例如,您可以有一个返回 TaskInitializePluginsAsync()
  • 如果延迟初始化不是一个大问题,那么只需在构造函数中执行初始化即可。

关于c# - 在属性内执行初始化是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25236270/

相关文章:

类实现中的 python stub 属性 "Unresolved Attribute Reference"

c# - WPF 工具包 DataGrid SelectionChanged 获取单元格值

java - 方法不能应用于 java 中的给定类型

Java:对所有捕获的异常调用方法

java - 从类方法显示进度对话框

javascript - 为什么我在 ReactJs 的 console.log 中未定义

c# - 将测试项目 appSettings 附加到 ASP.NET Core 集成测试

c# - Convert.ToDateTime(bool) 的意义何在?

c# - Watin DialogHandler 关闭 SaveFileDialog

c# - 如何在 C# 自动属性中返回对象的新实例