2013-09-17 3 views
1

Я написал следующий код в своем приложении mvc.Как инициализировать свойство базового класса из производного класса?

public class TestController : Controller 
{ 
    public ActionResult StronglyTypedView() 
    { 
     var obj = new MvcRouting.Models.Student(); 
     obj.age = 24; 
     obj.name = "prab"; 
     ViewData.Model = obj; 
     return View(); 
    } 
} 

В коде выше, ViewData является собственностью ControllerBase класса и Model является собственностью ViewDataDictionary class.Same вещи я попытался в следующий код, но я получаю нулевые значения в property1, как решить эту проблему?

public interface Iface1 
{  
    int age { get; set; } 
} 
public class classA : Iface1 
{  
    public int age { get; set; } 
} 
public abstract class classB 
{  
    public classA Property1 { get; set; } 
} 
public class TEST : classB 
{ 
    public void test() 
    {   
     Property1.age = 24; 
    } 
    public static void Main() 
    { 
    TEST obj = new TEST(); 
    obj.test(); 
    Console.Read(); 
    } 
} 
+1

Что не работает? – Patel

+2

'это не работает' не является хорошим объяснением - вы получаете сообщение об ошибке? это компиляция? Первое, что я заметил, вы никогда не инициализируете 'Property1', поэтому оно всегда будет« null ». Это даст «NullReference' Exceptio при попытке установить« Property1.age »... –

+1

почти 100% уверен, что вам нужно сделать это в' test() ':' Property1 = new classA(); Property1.age = 24; ' – wudzik

ответ

3

вы получаете нулевой ссылочный исключение, потому что вы должны инициализировать Property1 в classB

public interface Iface1 
{  
    int age { get; set; } 
} 
public class classA : Iface1 
{  
    public int age { get; set; } 
} 
public abstract class classB 
{  
    public classA Property1 { get; set; } 
} 
public class TEST : classB 
{ 
    public void test() 
    {  
     if(Property1 == null) 
     { 
      Property1 = new classA(); 
     } 

     Property1.age = 24; 
    } 
    public static void Main() 
    { 
    TEST obj = new TEST(); 
    obj.test(); 
    Console.Read(); 
    } 
} 
+0

Может быть, лучше его инициализировать в конструкторе .. – nawfal

+0

@nawfal, что до OP и зависит от конкретного случая. в этом случае это действительно не имеет значения ... –

+0

Вот почему я сказал «может быть». Я не исправлял тебя. – nawfal

0

Вы забыли инициализировать Property1 перед установкой его свойства.

public class TEST : classB 
{ 
    public void test() 
    {  
     Property1 = new classA(); 
     Property1.age = 24; 
    } 
    public static void Main() 
    { 
    TEST obj = new TEST(); 
    obj.test(); 
    Console.Read(); 
    } 
} 
1

Используйте это вместо этого.

public abstract class classB 
{ 
public classA Property1 { get; set; } 

public classB() 
{ 
    Property1 = new classA(); 
} 
} 
Смежные вопросы