2016-04-14 3 views
1

Обратите внимание, что это незавершенный код, но он просто стоит перед небольшой проблемой, так как я использую много концепций ООП C++. у меня может возникнуть проблема при попытке перейти с другой платформы.Получение ссылки на объект для нестатического метода

я получаю сообщение об ошибке при компиляции и заявил ошибку нестатический метод/собственность

using System; 

public class People 
{ 
    string name; 
    int age; 
    int height; 
    public virtual void insertDetail(People stu) 
    { 
     Console.Write("Please enter name : "); 
     stu.name = Console.ReadLine(); 
     Console.Write("Please enter age : "); 
     while(!int.TryParse(Console.ReadLine(), out stu.age)) 
     { 
      Console.WriteLine("You enter characters! Please re-insert"); 
     } 
     Console.Write("Please enter height: "); 
     while(!int.TryParse(Console.ReadLine(), out stu.height)) 
     { 
      Console.WriteLine("You enter characters! Please re-insert"); 
     } 
    } 
} 

public class Class : People 
{ 
    static People[] students = new People[5]; 
    public override void insertDetail(People stu) 
    { 
     Console.WriteLine("=================================="); 
     base.insertDetail(stu); 
    } 


    public static void Main(string[] args) 
    { 

     for (int i = 0; i < students.Length; i++) 
     { 
      students[i] = new People(); 
      insertDetail(students[i]); 
     } 

     Console.ReadKey(); 
    } 
} 
+2

Поскольку ваш 'Main' является' static', вы можете не получить 'СТУДЕНТОВ, которые ... * я не знать, где это объявлено! * – Ian

+0

Да, в Main, 'students' не объявляется. Это поле экземпляра в совершенно другом классе. Во всяком случае, какой класс? Во всяком случае, вам нужен экземпляр '' in Main. –

+1

'insertDetail' - это метод экземпляра, а не статический метод, создайте экземпляр для класса и используйте его. ex 'Class c = new Class(); c.insertDetail (..) ' –

ответ

3

Как указано в комментариях, вам нужен экземпляр для использования метода экземпляра.

Создать экземпляр для Class внутри Main

public class Class : People 
{ 
    static People[] students = new People[5]; 
    public override void insertDetail(People stu) 
    { 
     Console.WriteLine("=================================="); 
     base.insertDetail(stu); 
    } 


    public static void Main(string[] args) 
    { 
     Class c = new Class(); // this is required to access insertDetail 

     for (int i = 0; i < students.Length; i++) 
     { 
      students[i] = new People(); 
      c.insertDetail(students[i]); 
     } 

     Console.ReadKey(); 
    } 
} 

Проверьте это Demo

+0

Отлично. ответ я хочу! – user2422414

-1

Прежде всего никогда использования Class как ваше имя класса. Что касается ошибки, вам нужно предоставить дополнительную информацию о том, что вы пытаетесь сделать. Вы должны добавить static модификатор к вашему методу:

public static void insertDetail(People stu) 

Или, если вы хотите, чтобы это было переопределение чем:

public virtual void insertDetail() 
{ 
    this.name = "Some name"; 
    //... 
} 
+0

@Downvoters, пожалуйста, оставьте хотя бы небольшой крошечный комментарий к тому, что вас не устраивает. Не будьте настолько застенчивы;) – Seprum

+0

1) класс, представляющий класс учеников в школе, можно разумно назвать классом. 2) Исправление для того, чтобы не знать, чтобы создать экземпляр класса, заключается не в том, чтобы сделать все в вашей программе статичным. Вы даже ООП, брат? Исправление состоит в том, чтобы узнать, как работают классы. –

0

Вы получаете эту ошибку, когда вы делаете статический вызов метода экземпляра, как Object.ToString(), используя имя типа в качестве квалификатора, когда вам действительно нужен экземпляр.

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