小编Joh*_*lph的帖子

4
推荐指数
1
解决办法
502
查看次数

Fowler Null对象模式:为什么要使用继承?

为什么Fowler PoEAA p.498以下列方式定义空对象模式(示例缩短,语言为c#但无关紧要):

public class Customer
{
  public virtual string Name {get; set;}
}

public class NullCustomer : Customer, INull
{
  public override Name 
  {
     get { return "ImTheNull";}
     // setter ommitted
  }
}
Run Code Online (Sandbox Code Playgroud)

INull用作标记界面.我不喜欢这种方法有三个原因:

  1. 属性需要标记为虚拟
  2. 我不能再密封我的实体课了
  3. 引入至少(n + 1)个新类型(n个空对象,一个标记接口)

为什么不像这样实现:

public class Customer
{
  public static readonly Customer NullCustomer = new Customer(){Name = "ImtTheNullCustomer";}

  public string Name {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我一般都认为福勒的所有例子都经过深思熟虑,显然我必须在这里找到一些东西.

design-patterns null-object-pattern poeaa

4
推荐指数
1
解决办法
1603
查看次数

MvvmCross - Android:如何在主线程上执行应用程序初始化

我有一个使用MvvmCross的Android应用程序.应用程序通过MvxSplashScreenActivity作为主启动器启动,我提供了一个从MvxAndroidSetup派生的安装程序类.

然而,似乎在ThreadPool线程上调用了我的MvxAndroidSetup.CreateApp()重写(请参阅https://github.com/slodge/MvvmCross/blob/vnext/Cirrious/Cirrious.MvvmCross.Droid/Views/MvxBaseSplashScreenActivity.cs#L79).

确保我的应用程序初始化的某些部分在MainThread上执行的最佳方法是什么?

xamarin.android mvvmcross xamarin

4
推荐指数
1
解决办法
2796
查看次数

在发送消息之前检查有效的委托对象

我正在尝试在Objective-C中实现委托模式,但是我有时会在调用委托时遇到Bad Access异常.这似乎是由代表被释放引起的.Apple不建议保留代表.

在尝试发送消息之前,如何检查我的代理是否仍然有效?

cocoa delegates objective-c retain

3
推荐指数
1
解决办法
2308
查看次数

Objective-C:什么是私有什么不是?

为什么人们在使用

@interface ViewController : UIViewController 
{
@private
    UIButton* button_;
}
Run Code Online (Sandbox Code Playgroud)

公共标题中的@private声明?在实现中声明变量会产生相同的结果,不是吗?我觉得很奇怪,我认为公共标题应该只包含真正的公众成员.如何处理受保护的成员?

@implementation ViewController
    UIButton* button_;
@end
Run Code Online (Sandbox Code Playgroud)

我所知道的唯一区别是这个变量只在当前编译单元内可见(.m文件,对吧?)

方法是否也适用?我可以通过适当的方法排序或转发声明来编译.为什么人们关心为私有方法声明类别?仅用于测试目的?

private objective-c

3
推荐指数
1
解决办法
631
查看次数

将继承的控件添加到面板

我有一个带有两个按钮的基本表单(例如OK和Cancel).我想使用a TableLayoutPanel并且有两个按钮.子表单应该能够向表中添加更多控件,以及通过设计器修改其布局本身.

到目前为止,我无法让这个工作.我尝试过以下方法:

  • 添加TableLayoutPanel到子表单.Designer拒绝将两个按钮添加到面板.
  • 添加TableLayoutPanel基本表单.无法从子窗体向面板添加控件.

.net c# visual-studio winforms

3
推荐指数
1
解决办法
3421
查看次数

命名超类"消息"时的Objective-C-Runtime Bug

我有以下课程:

@interface Message : NSObject {}
@end

@implementation Message
- (void) dealloc
{
    // I won't be called
    [super dealloc];
}
@end

@interface FooMessage : Message {}
@end

@implementation FooMessage
- (void) dealloc
{
    // should call Message - dealloc
    [super dealloc];
}
@end
Run Code Online (Sandbox Code Playgroud)

以下单元测试:

- (void) test
{
    FooMessage* msg = [[FooMessage alloc] init];
    [msg release];
}
Run Code Online (Sandbox Code Playgroud)

EXC_BAD_INSTRUCTION测试将始终失败.FooMessage称它为超类析构函数dealloc,但调用永远不会到达那里.而是,Objective-C运行时将调用解析到另一个位置: StackTrace和反汇编

如果将Message基类重命名为其他类,则不会发生错误,例如AbstractMessage.似乎还有另一个名为class的类Message,其定义不公开.

这是一个错误吗?这里到底发生了什么?我是否违反了任何命名限制(尽管我认为编译器应该警告我)?

这是XCode 3.1.为iPhone OS 3.0编译.

runtime objective-c

3
推荐指数
1
解决办法
253
查看次数

用于定位多个.NET版本的构建系统

设计构建系统/项目结构的常见做法是什么,允许针对具有不同功能集的多个.NET版本?

特别:

  • 你应该在源代码控制中分支吗?
  • 你应该使用条件编译吗?
  • 你应该派生接口,从而对它们进行版本化吗?
  • 你应该创建单独的"versionX"项目并链接常见的项目文件吗?

.net msbuild version-control project-management

3
推荐指数
1
解决办法
434
查看次数

在 dhall 中拆分字符串

我正在玩 dhall,想知道如何实现表单的字符串拆分功能

?(text: Text) -> ?(delimiter: Text) -> List Text

但是,似乎 dhall没有表示单个字符的概念/类型。而 Prelude 中没有这样的功能。

您可以对 Text 值做的唯一事情是将它们连接起来

所以……有可能吗?

dhall

3
推荐指数
1
解决办法
287
查看次数

Mercurial:将最后n个修订版导出到MQ中

是否有一种简单的方法可以将最后n次提交导出到新的mq队列中并从真实存储库中删除提交?

我经常开始开发一个新功能,后来意识到我做错了/想要使用MQ来折叠补丁.

我目前在做:

  1. 导出最后n个提交为单个补丁
  2. 剥去最后n次提交
  3. 创造新的mq
  4. 以相反的顺序导入所有补丁

workflow mercurial mercurial-queue

2
推荐指数
1
解决办法
468
查看次数

在测试场景中泄漏的对象是否正常?

我写了一些Objective-C测试用例.典型的看起来如下:

- (void) test_size_Equals_Excpectation_After_initWithSize
{
    int size = 10;
    Buffer* buff = [[Buffer alloc] initWithSize:size];

    GHAssertEquals([buff size], size, nil);
}
Run Code Online (Sandbox Code Playgroud)

缓冲区alloc返回缓冲区,引用计数为1,我不关心在缓冲区上调用autorelease,因此在函数退出后泄漏.这在测试场景中是否可以接受?

testing memory-leaks memory-management objective-c

1
推荐指数
1
解决办法
58
查看次数

使用企业库验证块进行复杂对象验证

我正在使用企业库验证.

我有类似下面的课程

 public class Customer
    {

        public int Id { get; set; }
        [NotNullValidator(MessageTemplate = "{1} is null")]
        public string FirstName { get; set; }
        [NotNullValidator(MessageTemplate = "{1} is null")]
        public string Surname { get; set; }

    }

  public class Order
    {

        public int Id { get; set; }
        [NotNullValidator(MessageTemplate = "{1} is null")]
        public Customer Customer { get; set; }

    }
Run Code Online (Sandbox Code Playgroud)

当我使用订单对象和姓氏和名字是空的验证应该启动,但它没有.

我究竟做错了什么?

注意:我在WCF中使用它

.net enterprise-library

1
推荐指数
1
解决办法
2197
查看次数