这是一个奇怪的问题,但我想到了,并感到好奇:
假设我有一堂课:
public class Person{
public String name;
public Person(String _name){
name = _name;
}
public void TellMyName(){
Console.WriteLine(name);
}
}
然后,在代码中的某个地方创建一个Person实例。
Person p = new Person("John");
我是否可以编写p()
(好像是一个函数调用)并触发p.TellMyName()
?
Person p = new Person("John");
p();
//output: John
答案 0 :(得分:3)
如果可以的话,您可以通过委托来完成所需的语法:
public class Person
{
public string _name;
public Person(string name)
{
_name = name;
}
public void TellMyName()
{
Console.WriteLine(_name);
}
}
// ...
var o = new Person("John");
var p = (Action)o.TellMyName;
p();
或者您可以将构造函数更改为Create方法并使用以下方法:
public class Person
{
public string _name;
private Person(string name)
{
_name = name;
}
public static Action Create(string name)
{
return new Person(name).TellMyName;
}
public void TellMyName()
{
Console.WriteLine(_name);
}
}
// ...
var p = Person.Create("John");
p();
要加倍努力吗?好的,我们开始:
public class Person : System.Dynamic.DynamicObject
{
public string _name;
public Person(string name)
{
_name = name;
}
public void TellMyName()
{
Console.WriteLine(_name);
}
public override bool TryInvoke(
System.Dynamic.InvokeBinder binder, object[] args, out object result)
{
result = null;
if (args.Length == 0)
{
TellMyName();
return true;
}
return false;
}
}
// ...
dynamic p = new Person("John");
p();
答案 1 :(得分:-1)
否,您不能像普通方法p();
一样调用构造函数,而是在实例化对象时调用它,但是是的,您可以通过在ctor
内调用该方法来完成所需的操作喜欢
public Person(String _name){
name = _name;
TellMyName();
}
private void TellMyName(){
Console.WriteLine(name);
}