我对静态类和静态方法有疑问.从MSDN我理解"静态类和类成员用于创建可以在不创建类实例的情况下访问的数据和函数."
因此,如果我们不想将一个类与一个实例相关联,我们将把它作为静态.这是唯一的优势吗?任何人都可以指导我在静态类的实时场景.
类中的一些时间(不是静态的)我发现了静态方法.静态方法在实际中为实例提供了多少优势/性能优势.
假设我们有4个Vector2(是的,这是2d),所以我们有lineOneStart,lineOneEnd,lineTwoStart和lineTwoEnd.
如何检测2条线是否交叉?我不在乎他们在哪里交叉,我只是想知道他们是否相交.
在int类型?
很多代码使用int和double/float.
我知道有一些.NET移动版本,所以字节/短路自成一体,但桌面应用程序有什么意义吗?
当我做C++工作(游戏编程)时,我非常清楚我使用的每种数据类型,尽管我在C#/ Java工作中没有这种感觉.
如果我知道我的循环永远不会超过字节的边界,那么使用一个字节会不会有任何好处?
遵循测试驱动开发.
我最近实现了一个需要干净界面的算法(A*).通过干净我想要的是一些属性和一个搜索方法.
我发现很难找到的是测试搜索方法.它包含大约五个步骤但我基本上被迫在一个大的进程中编写这个方法,这使得事情变得困难.
对此有什么建议吗?
编辑
我正在使用C#.不,我目前没有手头的代码.我的问题依赖于一个测试只在实现整个搜索方法后才通过 - 而不是算法中的一个步骤.我自然重构了代码,但它实现了我发现很难.
假设您有一个通过其所有当前单元测试的类.
如果您要添加或提取一些方法/引入一个新类,然后使用组合来包含相同的功能,那么新类需要测试吗?
我是否应该这样做,所以任何建议都会很好.
编辑:
假设我应该添加我使用DI(依赖注入),因此我应该注入新类吗?
对于单元测试,你应该;
写一个测试.编写代码来传递它.重构.
要么
写下所有已知的测试.一次通过.重构.
我问这个是因为TDD声明你在所有测试通过后都停止编写代码,但这一点还不清楚.
编辑
我认为TDD更关注这个"规则"的一件事是与故事/任务有关吗?有人同意吗?
几个月后
我在看到关于该主题的截屏视频(我将尝试找到该链接)后进入的例程如下.
但是,使用C#的示例应该是通用的.
// Login page should not allow blank password // This would be removed when cut/pasted.
// Login page should not allow blank username
...
[TestFixture]
class LoginPageTests {
[Test]
public login_page_should_not_allow_blank_password() {
// Test code...
}
}
Run Code Online (Sandbox Code Playgroud) var subset = from item in document.Descendants("Id")
where item.Value == itemId.ToString()
select new PurchaseItem() {
Id = int.Parse(item.Parent.Element("Id").Value),
Name = item.Parent.Element("Name").Value,
Description = item.Parent.Element("Description").Value,
Price = int.Parse(item.Parent.Element("Price").Value)
};
Run Code Online (Sandbox Code Playgroud)
XML的结构如下:
<Items>
<Item>
<Id></Id>
<Name></Name>
<Description></Description>
<Price></Price>
</Item>
</Items>
Run Code Online (Sandbox Code Playgroud)
Id和价格都是整数值.名称和描述是字符串.
我发现我用过Linq to XML的东西很棒,这只是一个片段.但是,另一方面,我感觉它应该或可能更清洁.在这个片段中,转换似乎是最明显的问题.
有什么建议?
单元测试代码库时,我需要使用模拟对象的迹象是什么?
这会像在代码库中看到很多对其他对象的调用一样简单吗?
另外,我如何单元测试不返回值的方法?因此,如果我的方法返回void但打印到文件,我只是检查文件的内容吗?
模拟是针对外部依赖的,所以这就是一切,不是吗?文件系统,数据库,网络等......
我有一个课程需要使用策略设计模式.在运行时,我需要切换不同的算法,以查看对应用程序性能的影响.
有问题的类目前在构造函数中有四个参数,每个参数代表一个算法.
如何使用Ninject(或通用方法)仍然可以使用IOC但使用策略模式?
目前的限制是我的内核(容器)知道每个算法接口,但只能绑定到一个具体的类.我现在可以看到的唯一方法是在构造中传递所有八种算法,但是使用不同的接口,但这似乎完全是不必要的.如果我没有使用IOC容器,我不会这样做,所以必须有一些解决方法.
代码示例:
class MyModule : NinjectModule
{
public override void Load()
{
Bind<Person>().ToSelf();
Bind<IAlgorithm>().To<TestAlgorithm>();
Bind<IAlgorithm>().To<ProductionAlgorithm>();
}
}
Run Code Online (Sandbox Code Playgroud)
人需要使用这两种算法,以便我可以在运行时切换.但只有TestAlgorithm被绑定,因为它是容器中的第一个.
考虑以下:
public Something(IInterface concreteObjectOne, IInterface concreteObjectTwo)
{
this.concreteObjectOne = concreteObjectOne;
this.concreteObjectTwo = concreteObjectTwo;
}
Run Code Online (Sandbox Code Playgroud)
如何设置此类绑定与Ninject?我试着用谷歌搜索这个词,但由于我不知道这叫做什么我不能,也无法在Wiki上找到任何关于此的内容.
编辑:
我相信,这就是所谓的以公约为基础的结合,如所描述这里.但是,此文档适用于版本1.0和2.0没有该Only方法.我希望这可以在没有属性的情况下实现 - 使用名称约定或类似的东西.