是否存在在对象实例化后立即调用方法的方法

本文关键字:方法 调用 存在 对象 实例化 是否 | 更新日期: 2023-09-27 18:06:45

public class Foo
{
    public Foo(){ }
    //One of many properties 
    //set up in the same way
    private String _name;
    public String Name 
    { 
        get { return _name; }
        set {
            _name = value;
            //code that is important to run
            //only after the objects initial creation   
        }
    }
    private int _id;
    public int ID 
    { 
        get { return _id; }
        set {
            _id = value;
            //code that is important to run
            //only after the objects initial creation   
        }
    }
    public void Win()
    {
        //clean up method that wouldn't be needed
        //if I used optional parameters because
        //i would be able to set _name (and all the
        //other private properties directly without
        //using the public Set
    }
}

如何在c#中创建这种对象后自动调用方法

Foo ko = new Foo() {
    ID = 4,
    Name = "Chair"
};
ko.Win(); // <-- Want this to be called automatically inside the class

是否存在在对象实例化后立即调用方法的方法

在设置了一些随机的属性集(这就是初始化被翻译成…)之后,没有自动调用的方法

var foo = new Foo { Name = "bar" };

实际上是

的快捷方式:
var foo = new Foo();
foo.Name = "bar";

当以第二种形式编写时,人们不会期望在foo.Name赋值后调用任何神奇的方法。

你选择:

  • 如果你有一些需要设置属性更改的信息-只需将其设置为属性并在set部分编写代码。
  • 如果你必须在对象被认为"创建"之前配置一组特定的属性,构造函数参数是强制它的一种合理方法。
  • 你也可以实现builder模式,允许你延迟最终的构造(或使用一些其他的工厂方法,强制设置参数之前的最终对象创建。

构建器模式的代码示例:

 var foo = new FooBuilder { Name = "bar" }
    .Build();

如果你总是设置ID和Name呢?

private string _Name;
    public string Name
    {
        get { return _Name; }
        set {
            _Name = value;
            this.Win();
        }
    }

Win函数总是在你对名称设置值后调用,或者你可以为ID这样做,这是你的选择!

将Win()添加到构造函数中。在构造函数中调用/put

public Foo(string value, string value2) {
Value = value;
Value2 = valu2e;
Win();
}

这是构造函数。

不是最可伸缩的解决方案,但为什么不试试呢:

public class Foo
{
    public int ID { get; set; }
    public String Name { get; set; }
public Foo()
{
}
public Foo( int id )
{
// Win()
ID = id;
// Win()
}
Public Foo( string name )
{
// Win()
Name = name;
// Win()
}
public Foo( int id, string name )
{
// Win()
ID = id;
Name = name;
// Win()
}
    public void Win()
    {
        //Do Stuff that would go into the constructor
        //if I wanted to use optional parameters
        //but I don't
    }
}

您可以在设置属性之前或之后调用Win