是否存在在对象实例化后立即调用方法的方法
本文关键字:方法 调用 存在 对象 实例化 是否 | 更新日期: 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