Tag: 方法

延迟加载 – 最好的方法是什么?

我见过很多懒加载的例子 – 你有什么选择? 给定一个模型类,例如: public class Person { private IList _children; public IList Children { get { if (_children == null) LoadChildren(); return _children; } } } Person类不应该知道它是如何被装载的……或者它应该是什么? 当然它应该控制何时填充属性? 您是否有一个将Person与其子集合耦合在一起的存储库,或者您是否会使用不同的方法,例如使用lazyload类 – 即便如此,我也不希望在我的模型体系结构中使用lazyload类模糊。 如果首先请求一个Person然后它的子节点(即在这个例子中不是延迟加载)或者以某种方式延迟加载,你将如何处理性能。 这一切都归结为个人选择吗?

虚函数C#

我理解虚函数是什么。 但我没有得到的是他们如何在内部工作? class Animal { virtual string Eat() { return @”Eat undefined”; } } class Human : Animal { override string Eat() { return @”Eat like a Human”; } } class Dog : Animal { new string Eat() { return @”Eat like a Dog”; } } static void Main() { Animal _animal = new Human(); […]

暂停执行方法而不锁定GUI。 C#

我正在使用C#进行卡片游戏,参与我的OOP介绍文章并让游戏正常运行,但我正在为GUI添加“天赋”。 目前,卡片即时处理并显示在UI上。 我希望在交易卡之前暂停程序暂停一会儿。 当游戏启动时,以下代码运行以填充代表它们的PictureBox(最终将是一个循环): cardImage1.Image = playDeck.deal().show(); cardImage2.Image = playDeck.deal().show(); cardImage3.Image = playDeck.deal().show(); cardImage4.Image = playDeck.deal().show(); cardImage5.Image = playDeck.deal().show(); … 我尝试使用System.Threading.Thread.Sleep(100); 在每个deal()。show()之间以及每个方法中,但它实现的只是锁定我的GUI,直到所有的睡眠处理完毕,然后一次显示所有的卡片。 我也试过使用计时器和while循环的组合,但它产生了相同的效果。 达到预期结果的最佳方法是什么?

使用Moq“短路”无效方法?

我的团队最近决定使用Moq作为我们的模拟框架,因为它具有极大的灵活性和高度可读的语法。 由于我们刚接触它,我在看似简单的问题上磕磕绊绊 – 搜索(这里,谷歌等)找到了关于Moq的其他细微差别的大量讨论,但不一定是我所追求的,以及一些看似相关的问题变成了红色的鲱鱼。 我们正在测试一个具有外部依赖关系的类(确切地说是Amazon SimpleDb)但不希望我们的测试绑定到实时连接。 一种特殊的方法: 应用一些“业务”逻辑 如果合适,通过我们构建的提供程序调用SDB的调用,我们称之为SaveItem() 我想对它进行unit testing,以便我们设置所需的上下文并确保SaveItem() ,但是实际上没有调用SaveItem() (因为A)SDB的提供者是一个不是的模拟器完全水合,很可能炸弹和B)我不想为这笔交易付出数百次。) 在处理返回值的方法时,这是微不足道的。 mockDb.Setup(d => d.GiveMeSomething()).Returns(“Foo”); 在我概述的情况下,我的“ SaveItem() ”方法是无效的,因此使用Moq的Returns()方法的选项不可用。 虽然我可以设置一个回调来validationSaveItem()是否被调用,但我似乎无法让它实际上没有做任何事情。 天真/充满希望,我认为以下内容可行,但似乎仍然会调用该方法: mockDb.Setup(d => d.SaveItem(It.IsAny())); 所以百万美元的问题:以下虚构代码的Moq是什么? mockDb.Setup(d => d.SaveItem(It.IsAny())).STOP_RIGHT_HERE();

使用参数从JavaScript调用C#方法

我想用JavaScript中的参数调用C#方法。 如果我删除方法的参数s ,则有可能 function showDetail(kurz) { String s = kurz.toString(); ; } 要测试的C#方法: public void showDetail(String s) { Label_Test.Text = s.ToString(); } public void showDetail() { Label_Test.Text = “”; } 没有参数它工作正常,但有s变量我得到编译器错误: CS0103:当前上下文中不存在名称” 我试过了 showDetail(Object s){….} 并且 showDetail(String s){….} 但它不起作用。

C#将方法作为参数传递给另一个方法

我有一个在发生exception时调用的方法: public void ErrorDBConcurrency(DBConcurrencyException e) { MessageBox.Show(“You must refresh the datasource”); } 我想做的是将此函数传递给方法,因此如果用户单击是,则调用该方法,例如 public void ErrorDBConcurrency(DBConcurrencyException e, something Method) { if (MessageBox.Show(“You must refresh the datasource”) == DialogResult.OK) Method(); } 方法可能有也可能没有参数,如果是这种情况我也想传递它们。 我该如何实现这一目标?

如何使用可变参数/不同方法签名创建方法接口?

我正在尝试创建一个公共类的接口,但实现类可以有不同的参数。 例如 public interface IViewModel { //… void ResetReferences(); } // and then, in my class implementations, something like this: public class LocationViewModel : IViewModel { public void ResetReferences(List stateProvinces) //… } public class ProductViewModel : IViewModel { public void ResetReferences(List colors, List sizes) //… } 所以请注意我想要标准化“RestReferences”命名约定。 我很确定我不能这样做,但是有没有可行的设计模式? 例如在我的界面中,如下所示? // variable parameters void ResetReferences(params object[] […]

unit testing私有代码

我目前正参与使用C#进行开发 – 这里有一些背景知识:我们使用客户端应用程序实现MVP,并且我们有一个循环规则,该规则指出没有方法应该具有大于5的圈复杂度。这会导致许多小的私有方法这通常是一件事。 我的问题是关于unit testing一个类: 通过公共方法测试私有实现都很好……我没有遇到实现这个问题的问题。 但是……以下情况如何: 示例1.处理异步数据检索请求的结果(回调方法不应仅供公开测试) 示例2.执行操作的事件处理程序(例如更新View标签的文本 – 我知道的愚蠢示例……) 示例3.您正在使用第三方框架,它允许您通过覆盖受保护的虚拟方法进行扩展(从公共方法到这些虚拟方法的路径通常被视为黑盒编程,并且将具有框架提供的各种依赖性你不想知道) 上面的例子在我看来并不是设计不良的结果。 他们似乎也没有成为单独进行单独测试的候选人,因为这样的方法会失去他们的背景。 没有人对此有任何想法吗? 干杯,杰森 编辑:我认为我在原始问题中不够清楚 – 我可以使用访问器测试私有方法,并使用TypeMock模拟调用/方法。 那不是问题。 问题是测试不需要公开或不公开的东西。 我不想为了测试而公开代码,因为它可能会引入安全漏洞(只发布一个接口来隐藏它不是一个选项,因为任何人都可以将对象强制转换回其原始类型并获取访问权限我不希望他们) 被重构到另一个类进行测试的代码很好 – 但可能会失去上下文。 我一直认为让’帮助’类可以包含一堆没有特定上下文的代码是不好的做法 – (在这里思考SRP)。 我真的不认为这适用于事件处理程序。 我很高兴被certificate是错的 – 我只是不确定如何测试这个function! 我一直认为,如果它可以破坏或改变 – 测试它。 干杯,杰森

C#无法将方法转换为非委托类型

我有一个名为Pin的课程。 public class Pin { private string title; public Pin() { } public setTitle(string title) { this.title = title; } public String getTitle() { return title; } } 从另一个类我在List引脚中添加Pins对象,从另一个类中我想迭代List引脚并获取元素。 所以我有这个代码。 foreach (Pin obj in ClassListPin.pins) { string t = obj.getTitle; } 使用此代码,我无法检索标题。 为什么? (注意: ClassListPin只是一个包含一些元素的静态类,其中一个是List引脚)

如何为方法设置超时

如何为busy方法+ C#设置超时。