2010-09-01 2 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

Это не недвижимость, это поля. Свойства имеют методы get и/или set. –

ответ

1

Это не нарушит приложения, атрибуты будут иметь свое значение по умолчанию - объекты и строки будут установлены в null, булевы к false, целых/поплавков/удваивается до 0, символы в '\0' и т.д.
вы только можете столкнуться с пустой ссылкой исключения, если доступ к атрибутам объектов, которые не были установлены без проверки их ноль.

+0

Спасибо, аналогично строка будет установлена ​​по умолчанию как пустая, это правильно? метод будет возвращаться все время, только не все атрибуты будут назначены. – Sharpeye500

+0

Строка будет установлена ​​в значение «null», а не пустая строка, будьте осторожны! –

2

После первоначальной конструкции (до вызова конструктора) все поля находятся в исходном (0 или нулевом) состоянии. Для более сложных типов значений все их поля находятся в исходном (0 или нулевом) состоянии и т. Д., Рекурсивно.

3

Если ваш метод веб-сервис возвращает 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 по-прежнему будет иметь значение null. Таким образом, когда вы идете вызвать свойство (или в вашем случае поле) 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; 
Смежные вопросы