2012-05-18 2 views
0

Я не очень хорошо разбираюсь в свойствах. строка кода: method2 (x.str1, x.str2, x.str3, x.str4); --- выбрасывает мне ссылку на объект, не установленную на экземпляр ошибки объекта ". Любые мысли оценили. x.str1 не разрешает?Инициализация класса с использованием свойства в C# -

(я добавляю код и добавить больше функциональности существующих установить. Я бы инициализировать класс MyProperty с помощью методов и свойств.)

использованием otherC#

class Test{ 

    private myProperty x; 

    private string str1, str2, str3, str4; 

    private myProperty A 
      { 

       get { return x; }   

       set 
       { 

        str1 = value.str1; 
        str2 = value.str2; 
        str3 = value.str3; 
        str4 = value.str4; 

       }    
      } 

    public void myMethod() 
     { 

       Test tst = new Test(); 
       myProperty x = new myProperty(); 
       //Assigning property varaibles: 
        x.str1 = "this"; 
        x.str2 = "is"; 
        x.str3 = "my"; 
        x.str4 = "test"; 

       try 
       { 

        tst.method2(x.str1, x.str2, x.str3, x.str4); 
       } 
       catch(Exception) 
       { 
        throw; 
       } 
      } 

    public void method2(string str1, string str2,string str3, string str4) 
    { 
    } 

    } 

    OtherC#.cs contains the definition for myProerty class 

    namespace temp 
    { 
    public class xyx {some code;} 
    public interface abc {some code}; 
    public class myProperty { 

      public string str1 { get; set; } 

      public string str2 { get; set; } 

      public string str3 { get; set; } 

      public string str4 { get; set; } 
    } 
    } 

ответ

5

myProperty x не указывает на экземпляр объекта при вызове

x.str1 = "this"; 

вы должны инициализировать его первый (в коде конструктора, например).

+1

+1, OP это похоже, что вы пришли из C++, где объекты создаются автоматически, когда вы объявляете их так. Перед использованием вам нужно создать новый экземпляр, например 'x = new myProperty()'. – Tejs

+1

@Tejes Вы также должны явно создавать объекты на C++. Я не использовал C++ годами, но трудно себе представить, что это изменилось ... если я не проскользнул через какую-то червячную дыру в альтернативную вселенную. –

3

Переменная - это просто ссылка на объект. Это не само по себе предмет. Таким образом, переменная имеет значение null, пока вы не установите ее для ссылки на объект. В этом случае вы, вероятно, просто хотите, чтобы он был равен новому объекту, поэтому вам нужно создать его экземпляр. Например, измените эту строку:

private myProperty x; 

к этому:

private myProperty x = new myProperty(); 

я должен пояснить, что это верно только для ссылочных типов (классов), а не типы значений (структуры).

Смежные вопросы