Tag: 设计

为联网应用程序设计帮助?

注意 这是一个相当大的问题,所以请耐心等待,如果不清楚,我会提前道歉。 为了使这个问题易于管理,并尽量减少混淆,我省略了复制和粘贴类的一些属性。 CONTEXT 我正在编写一个联网应用程序 – 一种“远程桌面”应用程序,以便普通技术人员可以帮助他的朋友或邻居解决计算机问题。 我意识到像TeamViewer这样的免费和更高级的软件存在,但这个问题并没有讨论创建这个软件的实用性。 共同条款 客户是技术员,帮手 – 控制器 。 服务器是“受害者”,遇险者。 客户端通常是向服务器发起命令的客户端。 信息 该软件不仅仅是实时查看/控制应用程序。 我想要额外的模块 ,例如文件资源管理器模块和聊天模块 ( 这样他们就可以在不需要使用额外的即时消息软件的情况下进行通信 )。 最初,我通过UDP发送和接收消息的方法是手动且低效的。 ( 我使用Lidgren库进行UDP网络连接,这就是为什么我的数据包不显示低级字节,如标题消息大小。 ) Original Packet Structure: Byte Index Type Purpose/Description —————————————————— 0 byte The intended destination module (eg 1 -> Chat module) 1 byte The command for this module to perform (eg […]

如何强制调用C#派生方法

我有一个由某个工具生成的类,因此我无法更改它。 生成的类非常简单(没有接口,没有虚方法): class GeneratedFoo { public void Write(string p) { /* do something */ } } 在C#项目中,我们希望提供一种方法,以便我们可以插入MyFoo的不同实现。 所以我想让MyFoo从GeneratedFoo派生 class MyFoo : GeneratedFoo { public new void Write(string p) { /* do different things */ } } 然后我有一个CreateFoo方法,它将返回GeneratedFoo或MyFoo类的实例。 但是它总是调用GeneratedFoo中的方法。 GeneratedFoo foo = CreateFoo(); // if this returns MyFoo, foo.Write(“1”); // it stills calls GeneratedFoo.Write 这是因为它不是虚方法而被删除。 但我想知道是否有一种方法(可能是黑客)让它调用派生方法。 […]

最佳类型设置为返回集合的方法的返回类型?

返回collections品的最佳类型是哪种? 我应该使用IList , IEnumerable , IQueryable ,还有什么? 哪个最好, 为什么 ? 我正在尝试决定我应该使用哪种方式,无论是在接口还是我正在编写的几个类的实现中。 编辑让我更进一步,我使用LINQ to SQL通过WCF服务返回数据。 感觉这可能会改变最佳使用类型?

是否可以使用派生参数而不是基础参数覆盖方法?

我陷入了这种情况: 我有一个名为Ammo的抽象类, AmmoBox和Clip作为子项。 我有一个名为Weapon的抽象类, Firearm和Melee是孩子。 Firearm是抽象的, ClipWeapon和ShellWeapon是孩子。 在Firearm内部,有一个void Reload(Ammo ammo); 问题是, ClipWeapon可以使用Clip和AmmoBox重新加载: public override void Reload(Ammo ammo) { if (ammo is Clip) { SwapClips(ammo as Clip); } else if (ammo is AmmoBox) { var ammoBox = ammo as AmmoBox; // AddBullets returns how many bullets has left from its parameter ammoBox.Set(clip.AddBullets(ammoBox.nBullets)); } } 但ShellWeapon只能使用AmmoBox重新加载。 我能做到这一点: […]

在.net应用程序中嵌入流程图设计图面

我需要将流程图设计表面合并到我们正在开发的应用程序中,以允许用户创建基本上是工作流程/计划的内容。 我需要能够创建自己的’形状’,在它们上设置自定义属性,并且可能还有一些逻辑(如果,等等)。 我知道我需要看看在应用程序中托管WF,它看起来很合适,但有没有人知道我可以使用的其他设计师组件。

什么应该是最好的exception处理策略

我正在开发用户从UI调用方法的应用程序,我正在调用一个调用另一个方法的业务类的方法 UI – > Method1 – > Method2 – > Method3 如果在任何方法中发生任何exception,我想向用户显示错误消息。 我应该将exception直接抛到调用方法,在UI层我将捕获exception并显示消息。 除了抛出exception并在调用者处捕获它有没有更好的方法来处理它? 我不想使用C ++约定,其中返回整数作为结果。

您是否曾见过合理使用受保护内部访问修饰符的设计?

我没有,但我不说没有。 阅读此内容的所有C#开发人员可能都知道内部受保护的内容以及何时使用它。 我的问题很简单:您是否真的使用过它,或者使用受保护的内部访问修饰符来处理成功设计的项目? 如果是的话,请分享您的知识并发布好的样本,我终于可以欣赏这个棘手的修饰符的巧妙使用。 //我相信这不是主观的,我实际上是在寻求答案;-)

C#:返回在运行时确定具体类型的对象的方法?

我正在考虑设计一个方法,该方法将返回一个实现接口的对象,但其具体类型在运行时才会知道。 比如假设: ICar Ford implements ICar Bmw implements ICar Toyota implements ICar public ICar GetCarByPerson(int personId) 我们不知道在运行之前我们会得到什么车。 a)我想知道这个人有什么类型的汽车。 b)根据我们得到的具体汽车类型,我们将调用不同的方法(因为某些方法只对类有意义)。 所以客户端代码会做类似的事情。 ICar car = GetCarByPerson(personId); if ( car is Bmw ) { ((Bmw)car).BmwSpecificMethod(); } else if (car is Toyota) { ((Toyota)car).ToyotaSpecificMethod(); } 这是一个很好的设计吗? 有代码味吗? 有一个更好的方法吗? 我很好用返回接口的方法,如果客户端代码显然调用接口方法,那就没问题了。 但我担心的是客户端代码转换为具体类型是否是好的设计。

使用“单一责任原则”迫使我的容器拥有公共制定者

我正在努力按照SOLID原则进行设计。 我发现当你使用“单一责任原则”(SOLID的S)时,你通常必须在数据容器和数据处理器之间拆分类。 例如,如果我有一个具有5个属性的类人员从DB读取而不是将所有内容放在一个类中,我创建一个带有属性的Person类和另一个从数据库中读取该信息并创建Person的PersonReader类。 如果我这样做,我必须打开Person属性,以便PersonReader可以访问它们,但是我的封装比将所有内容放在黑盒子中并使属性只能读取更少。 我错过了什么或这是这个原则的缺点吗? 提前致谢 编辑:我已经将人作家改为一个人读者,因为没有必要在开始时公开财产制定者。

关联,聚合和组合

我正在处理这个问题。 我正在创造数学问题,每个人都有回应。 例如。 如果我的问题是关于“5x + 15 = 2的结果?” ,我将等待一个答案(作为整数)。 如果我的问题是“给我这个形状的区域和许可者” ,我将等待两个答案(作为双打)。 在另一个中,我将等待作为字符串的响应 和其他人一样,我可以有几种答案或各种数据类型的响应。 我的大问题是。 如何在类问题和响应之间建立关系。 如果这应该是一个关联,聚合或组合,我也在处理。 谢谢。 编辑:很好,这是一个组合。 最后,根据上述句子,我该如何表现设计? 这些是我的一些想法,但我想我错了。 public class Question { public Response _response; //public List //public Dictionary public Question() { this._response = new Response(); } } public class Response { }