- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我编译以下两个代码时,它给出了相同的结果(我认为是这样)。
//ManagementObject :
SelectQuery query = new SelectQuery("Win32_Environment");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
foreach (ManagementObject envVar in searcher.Get())
Console.WriteLine("Variable : {0}, Value = {1}",envVar["Name"], envVar["VariableValue"]);
//ManagementBaseObject :
SelectQuery query = new SelectQuery("Win32_Environment");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
foreach (ManagementBaseObject envVar in searcher.Get())
Console.WriteLine("Variable : {0}, Value = {1}",envVar["Name"], envVar["VariableValue"]);
这两种代码执行之间有什么区别...?
最佳答案
在这种特殊情况下,没有区别。
ManagementObjectSearcher.Get()
方法返回 ManagementObjectCollection
这是 ManagementBaseObject
的集合.这意味着该集合可以包含类型 ManagementBaseObject
或从 ManagementBaseObject
派生的任何类型的实例。
但是,ManagementBaseObject
被设计为一个基类,这意味着实际上它不会被实例化,而是它的子类将被实例化。请注意,这只是一个约定,并非由语言或框架强制执行。
此外,由于框架中唯一(直接)继承 ManagementBaseObject
的类是 ManagementObject
, Get()
有效地返回一个 ManagementObject
实例的集合。请注意,这只是目前的情况,没有什么可以阻止创建额外的 ManagementBaseObject
继承者。
因此,考虑到所有提到的注意事项,这意味着,如果您仅使用基类中定义的属性(而不是重写),您可以以任何一种方式进行迭代,并且代码的行为将完全相同。在您的代码中,您仅使用 indexer ,它确实在 ManagementBaseObject
类中定义,而不是被覆盖。
如果您想要一个在一个循环中失败而在另一个循环中工作的代码示例,您可以尝试在 ManagementObject
上定义的任何属性,例如 Path :
foreach (ManagementObject envVar in searcher.Get())
Console.WriteLine("Path : {0}, Value = {1}",envVar.Path.Path); //works
foreach (ManagementBaseObject envVar in searcher.Get())
Console.WriteLine("Path : {0}, Value = {1}",envVar.Path.Path); //compile error
关于.net - ManagementObject 和 ManagementBaseObject 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14582549/
我注意到 ManagementObject 是 IDisposable,但它也是从 ManagementClass.GetInstances() 和 ManagementObjectSearcher.
我只知道其中一些,例如“CreateVirtualDirectory”和“SetDatabaseConnection”等,但是我在哪里可以获得 ManagementObject.GetMethodPa
我想在远程机器上重新启动服务并且不想使用 ServiceController,因为在该机器上获取所有服务的过程花费了 21 秒,而以下 ManagementObject 在不到 2 秒内返回: C
当我编译以下两个代码时,它给出了相同的结果(我认为是这样)。 //ManagementObject : SelectQuery query = new SelectQuery("Win32_Envir
当我编译以下两个代码时,它给出了相同的结果(我认为是这样)。 //ManagementObject : SelectQuery query = new SelectQuery("Win32_Envir
这可能不是最好的方法,但我目前正在使用以下方法检索机器上的 RAM 量: manageObjSearch.Query = new ObjectQuery("SELECT TotalVisibleMem
我正在尝试在我的 Windows 窗体中编写一些 WMI,ManagementObject 为我提供了 “找不到类型或 namespace 名称‘ManagementObject’”错误 这是我未完成
我有一个 C# COM DLL,它使用 System.Management 命名空间调用 WMI。 DLL 正在加载到 C++ 服务中。每次调用 WMI 类时,我都会看到巨大的内存泄漏。大约一个小时后
因此,在导入 C# 类后,我得到了完整的错误列表。我搜索了错误并得到了很多结果,但是他们都说只需添加存在的 System.Management 命名空间,但它会给出这些错误。 类似的问题。没有解决方案
我在网上找到了一个代码,并一直在尝试获取有关 mo[] 的更多信息。 我正在尝试获取 ManagementObjectCollection 中包含的所有信息。 由于 mo 中的参数正在寻找一个我不知道
我正在使用以下PowerShell脚本获取本地计算机的所有Windows服务的名称,显示名称,状态,启动方式和路径名称,然后使用 Export-csv cmdlet将输出导出到csv文件, Get-W
在我的程序中,我使用 WMI 接口(interface)来查询有关程序运行的硬件的大量信息。然后,我将获取该信息并将其放入列表中以帮助稍后显示它,但目前除此之外并没有做太多其他事情。到目前为止,这种方
[C# .NET Windows 窗体 WMI] 我是 C# 的新手,但我有使用 VBScript 的经验,我正在尝试将我编写的脚本转换为 C#。我不只是使用转换器,而是重写代码并尝试优化它以帮助我学
如何获取 Format method of the Win32_Volume class 的返回值? 我使用:public void ManagementObject.InvokeMethod(Man
我是一名优秀的程序员,十分优秀!