【问题标题】:Object Initialization directly while creating it (set value) [closed]创建对象时直接初始化对象(设置值)[关闭]
【发布时间】:2020-02-01 17:34:48
【问题描述】:

我正在关注这门课程herethis is live demo

我有几个问题要问你,因为我想确认我理解我正在阅读的内容:

1)为什么在下面的代码中创建对象时直接设置值

Transaction t1 = new Transaction("8877", "6/25/2018");

而不是像下面那样做;哪个不行!!!

Transaction transac1 = new Transaction();
transac1.("1234", "2019/10/03");

2) public Transaction() {public Transaction(string c, string d) 是不是重载概念?

3) 下面是构造方法,使用重载吗?

public Transaction()
{
    tCode = " ";
    tDate = " ";
}

4) 为什么 Transaction 类没有属性,尽管我只看到下面两个带有私有访问修饰符的字段/变量。而我在 OOP 书中读到,您必须始终使用属性而不是从外部公开字段。

private string tCode;
private string tDate;

public interface ITransactions
{
    // interface members
    void showTransaction();
}

public class Transaction : ITransactions
{
    private string tCode;
    private string date;

    public Transaction()
    {
        tCode = " ";
        date = " ";
    }

    public Transaction(string c, string d)
    {
        tCode = c;
        date = d;
    }

    public void showTransaction()
    {
        Console.WriteLine("Transaction ID: {0}", tCode);
        Console.WriteLine("Date: {0}", date);
    }
}

class Tester
{
    static void Main(string[] args)
    {
        Transaction t1 = new Transaction("8877", "6/25/2018");
        Transaction t2 = new Transaction("5656", "7/25/2018");

        t1.showTransaction();
        t2.showTransaction();
        Console.ReadKey();
    }
}

【问题讨论】:

标签: c#


【解决方案1】:

1)

[...] 不起作用!!!

Transaction transac1 = new Transaction();
       transac1.("1234", "2019/10/03");

是的,这根本行不通,它是无效的语法。要么调用构造函数new Transaction(); 要么new Transaction("8877", "6/25/2018");

2)

public Transaction() {public Transaction(string c, string d)是重载概念吗?

是的。

3)

下面是构造方法,使用重载吗?

[...]

没有“构造方法”这样的东西。你有构造函数,你有方法,但没有任何“构造函数方法”。

4)

为什么Transaction 类没有属性,尽管我只看到下面的两个字段/变量带有私有访问修饰符。

您不需要使用公共属性公开所有私有字段。您拥有的任何私有字段都不需要拥有公共属性。如果您不想为您的班级中的任何数据提供此类访问权限,则您不需要这样做。在这种情况下,您只需要showTransaction()

【讨论】:

  • 谢谢。第二个、第三个和第四个我都明白了……但我还是不明白第一个问题……我明白了here对象实例化VS构造函数初始化
  • @Alice 如果您有任何问题,请发布您想问的新问题。请记住在提出任何问题之前检查How to Ask,并在提出问题之前搜索任何信息(例如stackoverflow.com/questions/740658/…您已经找到的内容)。此外,您在第一部分中编写的代码根本不起作用,无法编译。并避免一次问多个问题。这样问题就会变得太宽泛了。
  • 代码可以找到here
  • ECMA 335: "构造函数应该是实例方法,通过一种特殊形式的方法契约定义..."。我不相信我以前听过“构造函数方法”这个词,这对我来说也很奇怪。我建议爱丽丝不要使用这个词,因为人们会说“wut?”。但这是 Alice 的准确观察:它看起来像一种方法,而且是一种方法的特例。
  • @Alice 你写的代码Transaction transac1 = new Transaction(); transac1.("1234", "2019/10/03");在链接页面中不存在。这是无法编译的无效代码。
猜你喜欢
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
相关资源
最近更新 更多