Считаю, что проблема классификации множества классов еще не решена. Но в первом приближении все-таки удалось разбить классы на категории, которые упрощают поиск класса (если вы знаете его имя), или просмотр всего множества (если вы просто хотите его оценить). Следующий метод определяет позицию класса в дереве treeClasses с учетом указанных требований классификации.
void AddClass(string name, ManagementClass c)
{
TreeNode node = treeClasses.Nodes[0];
if (c.Derivation.Contains("__Event"))
{
Globals.FindOrAddNode("Event-Generating", ref node);
MyEvents.Classify(name, ref node);
}
else
{
if (TestForProperties(c, ref node))
MyProperties.Classify(name, ref node);
else
{
Globals.FindOrAddNode("Other", ref node);
MyOther.Classify(name, ref node);
}
}
node.Nodes.Add(name, name, 3, 2);
}
bool TestForProperties(ManagementClass c, ref TreeNode node)
{
foreach (QualifierData qd in c.Qualifiers)
{
if (qd.Name.Equals("dynamic") || qd.Name.Equals("static"))
{
Globals.FindOrAddNode("Properties Owners", ref node);
return true;
}
}
return false;
}
void ClearLists()
{
curClass = null;
nClasses = nMethods = nProps = nQualifiers = 0;
lblNumMethods.Text = lblNumProp.Text = "Select a class...";
lblDescr.Text = "Select a property, method or qualifier...";
listProp.Items.Clear();
listMethods.Items.Clear();
listQualifiers.Items.Clear();
tDescrClasses.Text = tDescr.Text = "";
btnGetValues.Visible = false;
}
Для решения проблемы наведения порядка в множестве классов понадобились три вспомогательных класса.
¨ Класс MyProperties помогает разобраться с классами, имеющими свойства.
¨ Класс MyEvents помогает разобраться с классами, имеющими события.
¨ Класс MyOther производит разбор остальных классов.
using System.Windows.Forms;
using System;
namespace Library
{
public static class MyProperties
{
static string[] letters = {
"A", "B", "C", "D", "E", "F", "G", "H", "I", "K", "L", "M", "N", "O", "P",
"Q", "R", "S", "T", "U", "V", "W", "X", "__" };
static string[] prefixes = {
"Ac", "Al", "Am", "AspNet", "As", "broker", "bu", "Ca", "Ce", "Ch", "CIM",
"Cl", "Co", "Cr", "Csc", "Ctl", "cursor",
"database", "De", "Disk", "Driver", "En", "Er", "Ex",
"Fa", "Fd", "Fi", "Fr", "He", "Ho", "Http", "HWConfig", "Im", "Io", "Is", "Kerb",
"latch", "Lo", "Lp","Ma", "MMC", "Me", "Mo", "MSNdis", "Mp", "MSi", "MSS", "MSW",
"MSF", "MSN", "MS1", "MSP", "MST", "MSK", "MS_", "MS", "Mu", "Ne", "Nl", "No", "Nt",
"Open", "Op", "Page", "Pl", "Po", "Process", "Prop", "Rd", "RS", "Registry", "Re",
"Sam", "Sc", "Set", "Se", "Si", "So", "Sq", "Sp", "St", "Sy",
"Tc", "Te", "Th", "TP", "Ts", "Ud", "Um",
"Web", "Wc", "Wd", "Wl", "Wm", "Win32_Perf", "Win32_A", "Win32_B", "Win32_C", "Win32_D",
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.