非常快的n00b问题,在PHP中我可以包含一个脚本目录.
即代替:
include('classes/Class1.php');
include('classes/Class2.php');
Run Code Online (Sandbox Code Playgroud)
是这样的:
include('classes/*');
Run Code Online (Sandbox Code Playgroud)
似乎找不到为特定类包含大约10个子类的集合的好方法.
我目前正在开发一个使用Adobe Flex 3编写的前端的应用程序.我知道FlexUnit,但我真正喜欢的是Ant/NAnt的单元测试运行器和与Flex Builder IDE集成的运行器( AKA Eclipse).有人存在吗?
另外,除了Cairngorm微体系结构示例之外,还有其他任何关于如何以"正确的方式"进行Flex开发的资源吗?
今天我碰巧发现一个C#类可以以隐式和显式方式继承一个接口.这让我感到惊讶.如果C#以这种方式工作,那么当以不同方式引用时,一个实例的行为会有所不同.
interface IFoo
{
void DoSomething();
}
class Foo : IFoo
{
#region IFoo Members
public void DoSomething()
{
Console.WriteLine("do something implicitly");
}
#endregion
#region IFoo Members
void IFoo.DoSomething()
{
Console.WriteLine("do something explicitly");
}
#endregion
}
Foo f = new Foo();
f.DoSomething();
((IFoo)f).DoSomething();
Run Code Online (Sandbox Code Playgroud)
上面的代码运行和输出
do something implicitly
do something explicitly
Run Code Online (Sandbox Code Playgroud)
我相信这种C#设计会使行为不一致.也许强制一个C#类可以以隐式或expliict方式从一个接口继承,但不能同时从两个接口继承.
有没有理由为什么C#以这种方式设计?
我一直在讨论"访问者"这个词的用法(上下文是Java编程).我倾向于认为访问器隐含地是"属性访问器" - 也就是说,该术语暗示它或多或少地提供对对象内部状态的直接访问.另一方坚持认为任何以任何方式触及对象状态的方法都是访问者.
我知道你们不能为我赢得这个论点,但我很想知道如何定义这个词.:)
到目前为止,我只做了一些Flex开发,但我更喜欢以编程方式在mxml文件上创建控件的方法,因为(如果我错了,请纠正我!)我已经收集到你可以'它有两种方式 - 也就是说,在单独的ActionScript类文件中具有类功能,但是在mxml中声明了包含的元素.
生产力方面似乎没有太大差异,但以编程方式进行数据绑定似乎有点不那么简单.我看了一下mxml编译器如何转换数据绑定表达式.结果是一堆生成的回调和比mxml表示中更多的行.所以这里有一个问题:有没有办法以编程方式进行数据绑定,而不涉及受伤的世界?
我基本上有这样的事情:
void Foo(Type ty)
{
var result = serializer.Deserialize<ty>(inputContent);
}
Foo(typeof(Person));
Run Code Online (Sandbox Code Playgroud)
这Deserialize<ty>不起作用,因为它期望Deserialize<Person>.我该如何解决这个问题?
我也想了解泛型如何工作以及它为什么不接受ty哪些是typeof(Person).
编辑:我应该提到这是一个人为的例子.我实际上无法更改函数的签名,因为它实现了一个接口.
编辑:序列化程序是一个JavascriptSerializer并在此处实现为动作过滤器.它被称为:
[JsonFilter(Param="test", JsonDataType=typeof(Person))]
Run Code Online (Sandbox Code Playgroud)
根据Marc和Anton的答案:
var result = typeof(JavaScriptSerializer).GetMethod("Deserialize")
.MakeGenericMethod(JsonDataType)
.Invoke(serializer, new object[] { inputContent });
Run Code Online (Sandbox Code Playgroud) 我想将一段使用Windows Impersonation API的代码包装成一个整洁的小助手类,并且像往常一样,我正在寻找一种先测试的方法.但是,虽然WindowsIdentity是托管类,但实际执行登录所需的LogonUser调用是另一个用户是advapi32.dll中的非托管函数.
我想我可以解决这个问题,为我的助手类引入一个接口,以便在实现中使用和隐藏P/Invoke调用,但测试该实现仍然是个问题.并且你可以想象,实际上在测试中执行模拟可能有点问题,因为用户实际上需要在系统上存在.
我为单元测试编写了一个抽象基类,它为我们的测试运行设置了足够的环境.该类将一些运行时环境位公开为属性,其类型因test而异(属性类型是继承的具体测试类中指定的类型参数).
这一切都很好,除了一位同事发现他无法在调试器中查看任何类的属性.事实证明,他的继承类中没有定义任何字段,并且CLR优化了某些东西,因此调试器无法显示属性.是否有可能以某种方式在基类中阻止这种情况,或者我是否必须告诉每个人他们需要定义至少一个在测试期间某处使用的字段?
编辑:
听起来像一个可能的罪魁祸首应该是优化/调试设置.也就是说,我正在调试模式下从Visual Studio构建应用程序,我已经仔细检查了所有项目都是为调试版本设置的,并且此解决方案中的所有项目都没有设置Optimize标志.
也许有必要注意我正在使用MSTest和Visual Studio测试运行器.
编辑2:
通过"无法查看属性"我指的是当我在Quickwatch中评估属性并获得红色感叹号和文本"无法评估表达式"错误文本时.并且为了避免你认为我完全偏离我的怀疑,添加一个在测试初始化方法中初始化的实例字段会使问题消失......
编辑3:
检查构建输出.我注意到使用以下选项调用编译器:
/debug+
/debug:full
/optimize-
/define:DEBUG,TRACE
Run Code Online (Sandbox Code Playgroud)
我认为这足以阻止这种情况的发生,但是你去了.:)
c# ×5
.net ×2
apache-flex ×2
unit-testing ×2
accessor ×1
cairngorm ×1
clr ×1
data-binding ×1
debugging ×1
definition ×1
eclipse ×1
explicit ×1
generics ×1
implicit ×1
include ×1
inheritance ×1
java ×1
mxml ×1
optimization ×1
php ×1
reflection ×1
types ×1
unmanaged ×1