【问题标题】:Constructor in Constructor [closed]构造函数中的构造函数[关闭]
【发布时间】:2013-08-26 21:26:24
【问题描述】:

有什么方法可以在 C# 中做到这一点吗?我不能在 C# 代码中使用 this(int,int) 。你能给我写一些类似的代码,它们会在 C# 中做同样的事情吗?谢谢! :)

public class JavaApplication2
{
    public static class SomeClass 
    {
        private int x;
        private int y;

        public SomeClass () { this(90,90); }
        public SomeClass(int x, int y) { this.x = x; this.y = y; }
        public void ShowMeValues ()
        {
            System.out.print(this.x);
            System.out.print(this.y);
        }
    }
    public static void main(String[] args) 
    {
        SomeClass myclass = new SomeClass ();
        myclass.ShowMeValues();
    }
}

【问题讨论】:

  • 在发布问题之前,您是否对此主题进行过任何研究?至少查阅过一本 C# 书籍?
  • “你能给我写一些类似的 C# 代码吗?” 是的,我可以,但前提是你给我发几个本杰明.这是我为别人做作业的通常小时费率。
  • 当然,c# 可以做很多 java 做的事情。借助 .NET 环境和新的 UI 技术WPF,它甚至可以做得更多。
  • 谷歌搜索它。已经有几个关于它的 StackOverFlow 问题
  • 如果两个构造函数都是公共的,为什么不只使用第二个带参数的构造函数呢?或者,如果您想要 int xint y 的默认值 - 只需在类定义中将其设置为 private int x = 90;

标签: c# java constructor


【解决方案1】:

如果你想把它翻译成 C#,有几件事需要改变:

  1. 主要问题是您已将SomeClass 声明为静态。它不会编译,因为static classes 不能有实例成员。您需要删除 static 关键字。
  2. 要从另一个调用constructor,您需要在构造函数参数之后使用: this(...)(或: base(...) 调用父类的构造函数)。
  3. 对于 .NET 应用程序,您需要使用 System.Console,而不是 System.out

这应该适合你:

public class SomeClass 
{
    private int x;
    private int y;

    public SomeClass () : this(90,90) { }
    public SomeClass(int x, int y) { this.x = x; this.y = y; }
    public void ShowMeValues ()
    {
        Console.WriteLine(this.x);
        Console.WriteLine(this.y);
    }
}

【讨论】:

  • OP的代码其实是Java code,他只是想在c#中也有类似的东西。这就是为什么他将JavaC#一起标记。
  • 谢谢你,它工作正常:)
【解决方案2】:

是的,C# 可以链接构造函数:

public SomeClass() :this(90,90) {}
public SomeClass(int x, int y) { this.x = x; this.y = y; }

这在 MSDN 上的 Using Constructors 中有介绍。

话虽如此,在 C# 中,类也必须不是 static

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 2010-12-08
    • 2018-05-06
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多