c#这是我如何覆盖方法?

时间:2011-01-26 16:46:25

标签: c# methods override

    // 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();
    }

这是正确/标准吗?或者我接近这个错误?目的是让userID在可选参数中传递。

7 个答案:

答案 0 :(得分:5)

您也可以使用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());
    }

答案 1 :(得分:2)

只要您使用同名不同参数的方法,您就会正确重载。

假设第二种方法是loadUserInfo,那么是 - 这是正确的。

答案 2 :(得分:2)

汤姆,

以这种方式执行它没有任何问题,但您不必使用不同的方法名来接受参数(loadUserInfo与loadUserInf)。如果它们接受不同的参数,则可以使用两个具有相同名称的不同方法。所以你可以:

public void loadUserInfo()

public void loadUserInfo(int usersID)

答案 3 :(得分:2)

首先,您所做的是method overloadingoverriding是完全不同的。假设它是方法重载你接下来并且参数化方法的名称是一个简单的拼写错误,那么就是你这样做。

答案 4 :(得分:1)

第二个应该是loadUserInfo,否则,是。

答案 5 :(得分:1)

如果您想将ID作为可选参数,您应该查看C#中的C#4.0可选参数

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

答案 6 :(得分:1)

不,不是。覆盖是当您为继承的方法提供不同的实现时,您正在做的是重载。

重载时,应该为方法使用相同的名称。此外,建议使用pascal case命名方法:

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

public void LoadUserInfo(int usersID) {
  this.ID = usersID;
  loadUserInfo();
}