如何使用c列出OOP方法
本文关键字:OOP 方法 列出 何使用 | 更新日期: 2023-09-27 18:26:20
我在寻找一个例子,但我不知道我做得对不对——这对我来说很难理解OOP。我正在创建一个应用程序。我正试图为我的调制解调器创建一个类似于仪表板的仪表板(这是一个usb调制解调器),我用它连接到互联网并发送短信,它是华为e353
这是我的代码,但我如何将其转换为OOP。我正在学习OOP。我带来了一本书,但如果没有人手,很难理解,所以我创建这个应用程序是为了好玩。
ModemReader.cs
class ModemReader
{
public List<string> list = new List<string>();
public void DetectModem(){
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root''CIMV2", "SELECT * FROM Win32_POTSModem");
foreach (ManagementObject queryObj in searcher.Get()){
if ((string)queryObj["Status"] == "OK"){
list.Add(queryObj["AttachedTo"] + " - " + System.Convert.ToString(queryObj["Description"]));
}
}
}
}
以我的形式
private void button1_Click(object sender, EventArgs e)
{
ModemReader detect = new ModemReader();
detect.DetectModem();
foreach (string value in detect.list)
{
comboBox1.Items.Add(value);
}
}
之后,我计划使用At命令与调制解调器通信
面向对象编程是使用动态或编程的对象(您有一个字符串对象列表),而不是静态的。你所展示的,我会考虑面向对象的设计,因为你可以根据变量输入,,动态地检测和添加新的对象到你的程序中
如果你让它获得输入,然后做一个庞大的检查列表,然后在添加或忽略输入并继续操作之后忽略输入,那么这就不是面向对象的编程。
OO是关于数据结构,如列表、数组或树来存储数据并使用它,而不是执行一个特定的操作并删除任何不再需要的
很抱歉没有作为评论添加,但我还没有足够的声誉来添加
这是一个基于观点的问题,看起来更像是一个代码审查。
第一件重要的事情是,你需要使用属性,使用大写名称,并使其只读,因为你不希望其他人在类之外修改你的列表:
// C# 6.0 syntax, initialize in constructor for earlier versions
public List<string> Result { get; } = new List<string>();
另一个注意事项是,您实际上没有使用List
,它只用于保存方法执行的结果。为什么不让方法返回它呢?
public static class ModemReader // or not static. it's up to you
{
public static string[] DetectModems() // I would use string[] because you won't modify it
{
List<string> result = new List<string>();
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root''CIMV2", "SELECT * FROM Win32_POTSModem");
foreach (ManagementObject queryObj in searcher.Get()){
if ((string)queryObj["Status"] == "OK"){
result.Add(queryObj["AttachedTo"] + " - " + System.Convert.ToString(queryObj["Description"]));
}
}
return result.ToArray();
}
}
并以这种方式使用:
var modems = detect.DetectModems();
comboBox1.Items.AddRange(modems);
注意:正如我已经说过的,OOP方式与true
或false
不同。OOP并不意味着"更好"或"正确"。任何方法和结构在不同的情况下都可能是好的或坏的。此外,我的更正使您的程序"较少OOP"
我只是给出了我的观察结果,并描述了一种方法,如果我开发了它,我会使用它,但它远非一种好的方法。你不需要试图按照一些规则做每件事——只需要让它变得容易。
2美分。
public interface IModem
{
string GetName();
}
class HuaweiModem : IModem
{
public string Name { get; set; }
public string GetName()
{
return Name;
}
}
interface IModemReader
{
List<IModem> DetectModems();
}
public class WmiModemReader : IModemReader
{
public List<IModem> DetectModems()
{
List<IModem> result = new List<IModem>();
var searcher = new ManagementObjectSearcher("root''CIMV2", "SELECT * FROM Win32_POTSModem");
foreach (var queryObj in searcher.Get())
{
if ((string)queryObj["Status"] == "OK")
{
IModem modem = new HuaweiModem()
{
Name = queryObj["AttachedTo"] + " - " + Convert.ToString(queryObj["Description"])
};
result.Add(modem);
}
}
return result;
}
}
然后在你的程序中这样使用:
IModemReader modemReader = new WmiModemReader();
var modems = modemReader.DetectModems();
foreach (var modem in modems)
{
comboBox1.Items.Add(modem.GetName());
}
在这种方法中,您可以看到OOP的一些概念,如继承、多态性。