2010-09-01 90 views
1

我有c#类,我有不同的属性。有属性的类但没有赋值的属性很少

public class Employee 
{ 
    public int ID; 
    public string Name; 
    public int Age; 
} 

WebServices pp=new WebServices(); 

Employee emp= pp.GetEmpInfo(); 
//pp is an instance of webservices which is web referenced in the app. 

emp.ID=100; 
emp.Age=25; 

我不会为GetEmpInfo()分配/获得名称返回值,是否会抛出任何异常?

如果你有一个包含10个属性的类,并且不会指定很少的属性,它是否会破坏应用程序?

请分享您的想法。生产中有一些代码,我不确定结果,所以我正在检查。

+1

那些不属性,它们是字段。属性获取和/或设置方法。 – 2010-09-01 18:03:15

回答

1

它不会中断应用程序,该属性将有自己的缺省值 - 对象和字符串将被设置为null,布尔到false,整数/浮点数/加倍到0,字符到'\0'
您只有访问尚未设置对象属性,不检查他们可能会遇到空引用异常空值。

+0

谢谢,类似的字符串将默认设置为空,是否正确?该方法将一直返回,只有不是所有的属性都会被分配。 – Sharpeye500 2010-09-01 18:35:24

+0

一个字符串将被设置为'null',而不是一个空字符串,要小心! – 2010-09-01 20:22:14

2

初始构建(调用构造函数之前)后,所有字段都处于初始(0或null)状态。对于更复杂的值类型,它们的所有字段都以递归方式初始(0或空)状态等等。

3

如果你的Web服务方法返回null

[WebMethod] 
public Employee GetEmpInfo() 
{ 
    return null; 
} 

那么下面将抛出一个NullReferenceException

emp.ID = 100; 

因为emp变量不会被分配。

为了避免这种验证,如果变量访问其属性之前被分配(或你的情况公共字段):

Employee emp = pp.GetEmpInfo(); 
if (emp != null) 
{ 
    emp.ID = 100; 
    emp.Age = 25; 
} 
1

如果GetEmpInfo()未返回值,则emp仍然为空。因此,当你打电话给emp的一个属性(或在你的情况下,一个字段),例如当你打电话给emp.ID=100时,你会得到一个System.NullReferenceException(对象引用没有设置为对象的一个​​实例)。您可能会在您的代码中添加空检查:

Employee emp= pp.GetEmpInfo(); 
//pp is an instance of webservices which is web referenced in the app. 

if (emp == null) 
{ 
    //you might choose to throw an error or set it to a new 
    //instance of an object. 
    emp = new Employee(); 
} 

emp.ID=100; 
emp.Age=25;