asp.net中的类魔术方法c#就像php一样

Car*_*man 0 c# asp.net

我知道很多在PHP,但我在asp.net新手.

在asp.net中存在魔术方法,如php?(__ construct(),__ isset()__ get()__ set()__ destruct()等),例如,我如何在asp.net c#中执行此操作:

class foo
{
    public $name;

    public function __contruct($name){
        $this->name = $name;
    }

    public function getName(){
        return $name;
    }
}

$test = new Foo("test");
echo $test->getName(); //prints test
Run Code Online (Sandbox Code Playgroud)

感谢帮助!

Kri*_*Oye 8

如果您真的错过了神奇的方法,可以在C#中创建动态基类(假设您使用的是.NET 4.0+):

    public abstract class Model : DynamicObject
{
    public virtual object __get(string propertyName)
    {
        return null;
    }

    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        if ((result = this.__get(binder.Name)) != null)
            return true;
        return base.TryGetMember(binder, out result);
    }

    public virtual void __set(string propertyName, object value)
    {
    }

    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        this.__set(binder.Name, value);
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

创建一个从中派生的新类型,并使用"dynamic"关键字进行实例化:

dynamic myObject = new MyModelType();

myObject.X = 42;  //  calls __set() in Model
Console.WriteLine(myObject.X); //  calls __get() in Model
Run Code Online (Sandbox Code Playgroud)

简而言之,如果您愿意,可以在C#中实现非常类似的行为(请参阅MSDN上的DynamicObject).