C # это как я переопределить методы? - PullRequest
1 голос
/ 26 января 2011
    // Loads a users info
    public void loadUserInfo()
    {
        CrystalTech.tblUsersDataTable dsCommon = new CrystalTech.tblUsersDataTable();
        using (tblUsersTableAdapter userAdapter = new tblUsersTableAdapter())
        {
            userAdapter.FillBy(dsCommon, this.ID);
        }
        this.username = dsCommon[0].userName;
        this.company.ID = dsCommon[0].clientID;
        this.company.name = dsCommon[0].ClientName;
        this.isBuyer = bool.Parse(dsCommon[0].isBuyer.ToString());
        this.isClient = bool.Parse(dsCommon[0].isClient.ToString());
        this.isClientPowerUser = bool.Parse(dsCommon[0].powerUser.ToString());
        this.isReportingUser = bool.Parse(dsCommon[0].reportingUser.ToString());
        this.isSupplier = bool.Parse(dsCommon[0].isSupplier.ToString());
        this.isPaperSupplier = bool.Parse(dsCommon[0].isPaperSupplier.ToString());
        this.hasKitView = bool.Parse(dsCommon[0].haskitview.ToString());
    }
    public void loadUserInfo(int usersID)
    {
        this.ID = usersID;
        loadUserInfo();
    }

Это правильно / стандарт?Или я подхожу к этому неправильно?Целью является передача идентификатора пользователя в необязательном параметре.

Ответы [ 7 ]

5 голосов
/ 26 января 2011

Вы можете также использовать дополнительные параметры начиная с C # 4.0:

// Loads a users info
    public void loadUserInfo(int usersID = 0)
    {
        if (usersID > 0) this.ID = usersID;

        CrystalTech.tblUsersDataTable dsCommon = new CrystalTech.tblUsersDataTable();
        using (tblUsersTableAdapter userAdapter = new tblUsersTableAdapter())
        {
            userAdapter.FillBy(dsCommon, this.ID);
        }
        this.username = dsCommon[0].userName;
        this.company.ID = dsCommon[0].clientID;
        this.company.name = dsCommon[0].ClientName;
        this.isBuyer = bool.Parse(dsCommon[0].isBuyer.ToString());
        this.isClient = bool.Parse(dsCommon[0].isClient.ToString());
        this.isClientPowerUser = bool.Parse(dsCommon[0].powerUser.ToString());
        this.isReportingUser = bool.Parse(dsCommon[0].reportingUser.ToString());
        this.isSupplier = bool.Parse(dsCommon[0].isSupplier.ToString());
        this.isPaperSupplier = bool.Parse(dsCommon[0].isPaperSupplier.ToString());
        this.hasKitView = bool.Parse(dsCommon[0].haskitview.ToString());
    }
2 голосов
/ 26 января 2011

Во-первых, вы сделали method overloading, overriding - это нечто совершенно другое. Предполагая, что вы перегрузили метод, и имя параметризованного метода - простая опечатка, тогда да, именно так вы и делаете.

2 голосов
/ 26 января 2011

Tom

Нет ничего плохого в том, чтобы делать это таким образом, но вам не нужно иметь другое имя метода для принятия параметра (loadUserInfo и loadUserInf). Вы можете иметь два разных метода с одинаковым именем, если они принимают разные параметры. Таким образом, вы могли бы иметь:

public void loadUserInfo()

И

public void loadUserInfo(int usersID)
2 голосов
/ 26 января 2011

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

Если предположить, что второй метод означает loadUserInfo тогдада - это правильно.

1 голос
/ 26 января 2011

Нет, это не так. Переопределение - это когда вы предоставляете другую реализацию для унаследованного метода, что вы делаете, это перегружаете.

При перегрузке вы должны использовать одно и то же имя для методов. Кроме того, рекомендуется называть методы с использованием регистра pascal:

// Loads a users info
public void LoadUserInfo() {
  ...
}

public void LoadUserInfo(int usersID) {
  this.ID = usersID;
  loadUserInfo();
}
1 голос
/ 26 января 2011

Если вы хотите использовать ID в качестве необязательного параметра, вы должны проверить необязательный параметр C #, который находится в C # 4.0

http://geekswithblogs.net/michelotti/archive/2009/02/05/c-4.0-optional-parameters.aspx

1 голос
/ 26 января 2011

Второй должен быть loadUserInfo, но в остальном да.

...