我有一个叫雇员的类,它有一个名为保险的字段,它是这样的保险类型。
public class Employee
{
public string Name;
public Insurance Insurance;
}我还有一门课叫保险
public class Insurance
{
public int PolicyId;
public String PolicyName;
} 现在,在主程序中,我想做一些类似的事情
var myEmployee = new Employee();
myEmployee.Name = "Jhon";
myEmployee.Insurance.PolicyId = 123 ;
myEmployee.Insurance.PolicyName = "Life Time" ;C#在抱怨,我知道如何通过创建保险类的实例来修复它。
我的问题是,我能以我想在主程序中使用的方式分配字段的值吗?
**
myEmployee.Insurance.PolicyId = 123 ;
myEmployee.Insurance.PolicyName = "Life Time" ;**我试过了
public class Employee
{
public Employee()
{
Insurance Insurance = new Insurance();
}
public String Name;
public Insurance Insurance;
public class Insurance
{
public int PolicyId;
public String PolicyName;
}
}当我尝试的时候
class Program
{
static void Main(string[] args)
{
var joe = new Employee();
joe.Name = "Joe";
joe.Insurance.
}我知道这个错误-
错误2 'ConsoleApplication1.Employee.Insurance‘和'ConsoleApplication1.Employee.Insurance’c之间的歧义:\users\联想\documents\visual studio ConsoleApplication1.Employee.Insurance 15 17 ConsoleApplication1
发布于 2013-08-08 18:32:27
您可以在员工的构造函数中实例化保险,以便为您自动完成。您可以提供默认值,以确保在稍后访问时还未定义为有效的默认值。
public class Employee
{
Insurance Insurance { get; set; }
public Employee()
{
this.Insurance = new Insurance() { PolicyId = -1 };
}
}
public class Insurance
{
public int PolicyId { get; set; }
public string PolicyName { get; set; }
}或者将类嵌套起来:
public class Employee
{
Insurance InsurancePolicy { get; set; }
public Employee()
{
this.InsurancePolicy = new Insurance() { PolicyId = -1 };
}
public class Insurance
{
public int PolicyId { get; set; }
public string PolicyName { get; set; }
}
}发布于 2013-08-08 18:30:52
不需要更改Employee类,您可以使用对象初始化器:
var myEmployee = new Employee
{
Name = "Jhon",
Insurance = new Insurance
{
PolicyId = 123,
PolicyName = "Life Time"
}
};或者,最好是让Employee类在其构造函数(如其他答案)中创建Insurance的一个新实例,或者在Insurance属性getter本身中创建一个新实例,因此只有在使用它时才会实例化它。下面是后者的一个例子:
class Employee
{
private Insurance insurance;
public Insurance Insurance
{
get
{
if (insurance == null)
{
insurance = new Insurance();
}
return insurance;
}
}
}最后,我建议您不要构建具有所有公共字段的类,除非您确实知道这是您想要的。相反,我会考虑在字段上使用属性。我已将其他人的建议纳入以下代码,并提供了自己的建议:
public class Employee
{
public Employee()
{
this.Insurance = new Insurance();
}
// Perhaps another constructor for the name?
public Employee(string name)
: this()
{
this.Name = name;
}
public string Name { get; set; }
public Insurance Insurance { get; private set; }
}
public class Insurance
{
public int PolicyId { get; set; }
public string PolicyName { get; set; }
}发布于 2013-08-08 18:31:07
当然,但是如何分配属于null对象的东西呢?您需要在Insurance的构造函数中实例化Employee。
public Employee()
{
this.Insurance = new Insurance();
}编辑有关您的评论:按照这种方法,将能够用两个点访问myEmplyee.Insurance.PolicyID。构造函数在Employee类中,因此一旦实现,您就不必键入任何超出您已经尝试过的操作的内容。
https://stackoverflow.com/questions/18133392
复制相似问题