相关疑难解决方法(0)

为什么接口定义中需要参数名称?我可以在实现过程中选择新的参数名称

不确定这是否是一个愚蠢的问题,但我只是注意到了这一点:

public interface IActivityDao : IDao<Activity>
{
    IList<Activity> GetAllSinceSequence(long sequence, int count);
}

public class ActivityDao : AbstractNHibernateDao<Core.Domain.Activity>, IActivityDao
{        
    public IList<Activity> GetAllSinceSequence(long sequence, int maxRecords)
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

在我的实现中,我调用了第二个参数'maxRecords'.然而,在界面中,它被定义为"计数".编译器仍然认为接口已实现,这很好,但可能会导致一些歧义.显然,我应该重命名其中一个参数以匹配另一个参数.

在重命名之前我玩了一下,发现了一些有趣的东西.我不允许将我的界面声明为:

public interface IActivityDao : IDao<Activity>
{
    IList<Activity> GetAllSinceSequence(long, int);
}
Run Code Online (Sandbox Code Playgroud)

这只是编译器对C#语义的过度保护吗?除了使代码更具可读性之外,接口方法中的参数名称的用途是什么?在我看来,如果在实现时不强制参数名称,它会引起歧义.

c#

15
推荐指数
2
解决办法
2534
查看次数

如何在TypeScript中重用函数签名定义

我有以下代码:

class A {
  constructor(public n: number) {}  

  defaultFn(a: number): number {
    return a + 1;
  }

  doStuff(callback?): number {
    return callback ? callback(this.n) : this.defaultFn(this.n);
  }
}
Run Code Online (Sandbox Code Playgroud)

如何告诉TypeScript callback传递给doStuff方法的可选函数应该与方法具有相同的签名defaultFn

typescript

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

验证函数签名 - 接口与类型别名

我有以下功能:

function (n: number) {
    return {s: n};
}
Run Code Online (Sandbox Code Playgroud)

我需要为签名创建一个验证器。从我读过的内容来看,我有两个选择:

界面

interface ValidatorFnInterface {
    (n: number): {
        [key: string]: any;
    };
}
Run Code Online (Sandbox Code Playgroud)

类型别名

type ValidatorFnType = (n: number) => {
    [key: string]: any
};
Run Code Online (Sandbox Code Playgroud)

它们可以这样使用:

let f1: ValidatorFnInterface = function (n: number) {
    return {s: n};
};

let f2: ValidatorFnType = function (n: number) {
    return {s: n};
};
Run Code Online (Sandbox Code Playgroud)

打字稿lib.d.ts似乎在使用类型别名,而 angular2 代码似乎在使用接口。我的问题是什么时候使用什么?在决定时是否应该使用任何逻辑或者是偏好问题?

typescript

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

标签 统计

typescript ×2

c# ×1