有没有办法自己开课?

时间:2015-10-21 18:28:04

标签: c# constructor visual-studio-2015

假设我有一些体面的类,并希望从db启动它。但我不想使用任何setter或类似复制构造函数的东西。

你知道更好的解决方案吗?

让我用例子来解释..

我有一个User类 - 从示例中可以看出 - 使用ctor,并且有另一个带有PK的ctor。 我想从db中找到我的用户,PK和userInside变量应该是我的新用户对象。

如何将userInside替换为基类本身?

public class User
{
    public int ID { get; set; }
    public string Name { get; set; }

    public User()
    {

    }

    public User(int id)
    {
        var userInside = dataContext.Users.FirstOrDefault(q => q.ID == id);

    }
}

3 个答案:

答案 0 :(得分:2)

不,你不可能做你要做的事。语法如下:

public User(int id)
{
    var userInside = dataContext.Users.FirstOrDefault(q => q.ID == id);
    this = userInside;
}

但是,如果您尝试这样做,则会发现以下错误:

Error: Cannot assign to '<this>' because it is read-only.

答案 1 :(得分:1)

我通常会为我为此构建实例的类添加一个静态FromId函数。

public static User FromId(int id)
{
    User u = new User();

    u......

    return u;

}

并像这样使用它。

User TheUser = User.FromId(45);

答案 2 :(得分:1)

p e p's answer已经涵盖了为什么在构造函数中执行它不起作用,因为您可以做的另一个选择是在类上使用静态方法来返回一个新实例。

public class User
{
    public int ID { get; set; }
    public string Name { get; set; }

    public User()
    {

    }

    public static User GetUser(int id)
    {
        return dataContext.Users.FirstOrDefault(q => q.ID == id);
    }
}

所以你可以称之为的两种方式是

var foo = new User();
var bar = User.GetUser(0);