2

我正在构建一些小型库,但遇到了问题。我想提供一个双向的解决方案,例如:

我怎样才能做到这一点?我正在抛出异常,因为它需要一些东西......欢迎任何可以做的例子:)谢谢!

编辑:我正在执行一些事情,最初我的代码类似于这个:

 System.IO.DriveInfo d = new System.IO.DriveInfo("C:"); 

我想用我的班级实现以下目标:

Driver d = new Driver(); 
d.DriverLetter = "C:"; 

并且仍然得到相同的结果,我使用 ManagementObjectSearch、ManagementObjectCollection 和其他一些 System.Management 类。

4

4 回答 4

12

您需要提供两个构造函数:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Country { get; set; }

    // Paramterless constructor  -  for   new Person();
    // All properties get their default values (string="" and int=0)
    public Person () { }

    // Parameterized constructor -  for   new Person("Joe", 16, "USA");
    public Person (string name, int age, string country)
    {
        Name = name;
        Age = age;
        Country = country;
    }
}

如果您定义了参数化构造函数,则不包含默认的无参数构造函数。因此,您需要自己包含它。

从 MSDN 10.10.4 默认构造函数

如果类不包含实例构造函数声明,则会自动提供默认实例构造函数。

于 2013-05-15T08:16:19.483 回答
2

您必须定义一个接受这三个参数的构造函数:

public class Person
{
    public Person(string name, string age, string country)
    {
        this.Name = name;
        this.Age = age;
        this.Country = country;
    }
 }

这样,您可以在构造类时将值分配给属性。一个类可以有多个构造函数采用不同的参数,并且可以让一个构造函数调用另一个构造函数,其: this()语法如下:

public class Person
{
    public Person()
        : this(string.Empty, string.Empty, string.Empty)
    {

    }

    public Person(string name, string age, string country)
    {
        this.Name = name;
        this.Age = age;
        this.Country = country;
    }
 }

这里“空”构造函数将调用另一个构造函数并将所有属性设置为空字符串。

于 2013-05-15T08:16:47.340 回答
1

尝试这个:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Country { get; set; }

    public Person()
    {
    }

    public Person(string name, int age, string country)
    {
        Name = name;
        Age = age;
        Country = country;
    }
}

class Test
{
    static void Main(string[] args)
    {
        var person1 = new Person();
        person1.Name = "Joe";
        person1.Age = 2;
        person1.Country = "USA";

        var person2 = new Person("John", 4, "USA");
    }
}

如果您不定义构造函数,.NET Framework 将隐式提供默认/无参数构造函数。但是,如果定义参数化构造函数,则还需要显式定义默认构造函数。

于 2013-05-15T08:22:50.877 回答
0

您可能缺少您的Age属性类型为intor string

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Country { get; set; }
    public Person()
    {

    }
    public Person(string name, int age, string country)
    {
        this.Name = name;
        this.Age = age;
        this.Country = country;
    }
}
class Program
{
    static void Main(string[] args)
    {
        Person p1 = new Person("Erik", 16, "United States");

        Person p2 = new Person();
        p2.Name = "Erik";
        p2.Age = 16;
        p2.Country = "United States"; 
    }
}

编辑:您还需要无参数构造函数。

于 2013-05-15T08:16:07.040 回答