c #: начинающие проблемы конструктора CLASS - PullRequest
3 голосов
/ 19 октября 2010
public class ElapsedTime
{
    public int hours;
    public int minutes;
    public void ElapsedTime(int h, int m)
    {
        hours = h;
        minutes = m;
    }
}

из другого события, я делаю это:

    ElapsedTime BeginningTime = new ElapsedTime();

как бы я инициализировал h и m?

, когда я пытаюсь сделать это: BeginningTime.ElapsedTime(7, 7);

выдает эту ошибку:

Ошибка 1 «ElapsedTime»: имена членов не могут совпадать с типом их вложения

all iwant - это класс с конструктором, который принимает значения инициализации.и я хочу, чтобы это можно было назвать.

ОБНОВЛЕНИЕ:

теперь у меня есть:

 public class ElapsedTime
        {
            private int hours;
            private int minutes;
            public ElapsedTime(int h, int m)
            {
                hours = h;
                minutes = m;
            }
        }

это дает мне ту же ошибку наpublic ElapsedTime(int h, int m)

Ответы [ 7 ]

6 голосов
/ 19 октября 2010

Не указывать void. Имея его там, вы заявляете, что это метод, а не конструктор.

public class ElapsedTime
{
    public int hours;
    public int minutes;
    public ElapsedTime(int h, int m)
    {
        hours = h;
        minutes = m;
    }
}

Тогда для создания экземпляра достаточно просто вызвать конструктор.

ElapsedTime BeginningTime = new ElapsedTime(7, 7);
2 голосов
/ 20 октября 2010

Конструктор класса должен иметь одно и то же имя самого класса.Теперь параметры h и m делают его параметризованным конструктором.Чтобы инициализировать экземпляр этого класса, вам необходимо указать значения для них.

ElapsedTime beginningTime = new ElapsedTime(7, 7);

Вызов конструктора через переменную невозможен:

ElapsedTime beginningTime;
beginningTime.ElapsedTime(7, 7); // This will cause an error, as your constructor isn't a method...

В inroder длябудь инициализатором класса, конструктор не имеет возвращаемого типа (ни void).

Конечно, если вы хотите свойство, которое дает вам значения в определенном формате, вам нужно будет предоставить свойство, котороепредоставит вам значения, которые вы создали для своего экземпляра:

public class ElapsedTime {
    public ElapsedTime(int h, int m) {
        Hours = h;
        Minutes = m;
    }

    public int Hours { get; private set; }
    public int Minutes { get; private set; }
    public string ElapsedTime {
        get {
            return string.Format("{0}:{1}", Hours, Minutes);
        }
    }
}

Правильно ли я понял ваш вопрос?

2 голосов
/ 19 октября 2010

Ваш конструктор не прав. Конструкторы не имеют возвращаемого типа. Это должно выглядеть так

public class ElapsedTime {
   private int hours;
   private int minutes;

   public ElapsedTime(int h, int m) {
     hours = h;
     minutes = m;
   }
}

и затем вы можете создать новый экземпляр, подобный этому

ElapsedTime BeginningTime = new ElapsedTime(7, 7);
1 голос
/ 20 октября 2010

То, как вы настраиваете вещи, указывает на то, что вы хотели бы передать некоторые значения h и m в конструктор при создании объекта. Вы должны сделать это:

public class ElapsedTime
{
    // you should probably makes these private
    private int hours;
    private int minutes;
    // I took out the "void" as it is not correct
    public ElapsedTime(int h, int m)
    {
        hours = h;
        minutes = m;
    }
}

И тогда вы сделаете это для создания экземпляра объекта класса ElapsedTime:

ElapsedTime BeginningTime = new ElapsedTime(7, 7);

Если вы хотите сделать все так, как у вас сейчас (где вы устанавливаете значения часов и минут после создания нового экземпляра объекта, вы должны выставить эти Fields - Properties, например так:

Public int Hours
{
    set {
        hours = value;
    }
    get {
        return hours;
    }
}

Public int Minutes
{
    set {
        minutes = value;
    }
    get {
        return minutes;
    }
}

И тогда вы можете использовать их следующим образом:

ElapsedTime BeginningTime = new ElapsedTime(7, 7);
BeginningTime.Hours = 7;
BeginningTime.Minutes = 7;

Выше эквивалентно ElapsedTime BeginningTime = new ElapsedTime(7, 7);

так что вы получите это в файле класса:

public class ElapsedTime
{
    // you should probably makes these private
    private int hours;
    private int minutes;
    // I took out the "void" as it is not correct
    public ElapsedTime(int h, int m)
    {
        hours = h;
        minutes = m;
    }
    Public int Hours
    {
        set {
            hours = value;
        }
        get {
            return hours;
        }
    }

    Public int Minutes
    {
        set {
            minutes = value;
        }
        get {
            return minutes;
        }
    }
}
1 голос
/ 19 октября 2010

Элементом, на который ссылаются, является метод ElapsedTime(). В частности, вы не создали конструктор. Вы создали метод с именем, которое будет иметь конструктор.

Попробуйте удалить void перед определением вашего метода. Это сделает его актером.

1 голос
/ 19 октября 2010
ElapsedTime BeginningTime = new ElapsedTime(7,7);

конечно удалить пустоту из ElapsedTime ()

1 голос
/ 19 октября 2010

Вы имели в виду, что метод будет конструктором, поэтому он не должен содержать тип возвращаемого значения (удалить void)
Теперь вы можете использовать:

ElapsedTime BeginningTime = new ElapsedTime(7,7);  

Вы не можете вызвать конструктор после создания класса.
Конструкторы предназначены для присвоения классу значений initial.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...