【问题标题】:Give "this" as default value of class method [duplicate]将“this”作为类方法的默认值[重复]
【发布时间】:2013-04-27 10:31:45
【问题描述】:

我想使用this 作为类方法的默认值,如下代码:

public class Article
 {
    public int Id;//PK
    public String Author;//can be empty=anonymous
    public int? ToPublishDate;
    public String Summery;
    public String Content;
    public int RegDate;
    public Boolean Publish;

    private Boolean write(Article article=this,long position)
    {
        return true;
    }
 }

但是在this 上给我这个错误:

“article”的默认参数值必须是编译时常量。

为什么会出现此错误,我该如何解决?

【问题讨论】:

  • 如果您有一个写入任意实例的方法,并且它不需要涉及被调用的实例,您可能应该将其设为静态!也许您的情况有所不同,但这往往是惯例。换句话说:如果someArticle.write(otherArticle, 1) 暗示它实际上将以某种方式涉及someArticle 实例的执行。如果someArticle 除了作为您调用该方法的实例之外从未参与,那么它可能应该只是Article.write(otherArticle, 1)

标签: c#


【解决方案1】:

您可以将默认值设置为 null,然后在方法中重置其默认值:

private Boolean write(long position, Article article=null)
{
    article = article ?? this;
}

(另请注意,所有非默认参数都必须位于任何默认参数之前。)

【讨论】:

  • +1。此外,如果 null 可以作为可能的值传入,则您需要覆盖而不是默认参数 (bool Write(long position){ return Write(position, this);})
  • @Alexei 你的意思是超载,而不是覆盖;)
  • 为什么会出现这个错误?
  • @majidgeek 因为this 不是编译时常量。如在编译代码时,this 还没有值。 this 仅在运行时有值,其值取决于代码的调用方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 2013-09-06
  • 1970-01-01
  • 2013-02-17
  • 2017-07-25
  • 2019-07-08
  • 1970-01-01
相关资源
最近更新 更多