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

时间:2012-10-21 20:28:12

标签: 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

感谢您的帮助!

3 个答案:

答案 0 :(得分: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;
    }
}

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

dynamic myObject = new MyModelType();

myObject.X = 42;  //  calls __set() in Model
Console.WriteLine(myObject.X); //  calls __get() in Model

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

答案 1 :(得分:1)

C#中的等价物将是这样的:

public class Foo
{
  public string Name { get; set; }

  public Foo(string name)
  {
    Name = name;
  }

  public string GetName()
  {
    return Name;
  }
}

var test = new Foo("test");
Console.WriteLine(test.GetName());

正如你所看到的,C#中有“魔力”。我已经帮助你开始了所以现在你可以去学习C#。

答案 2 :(得分:0)

class Foo
{
    private string name;  //don't use public for instance members

    public Foo(string name){
        this.name = name;
    }

    public string getName
    {
      get{
        return this.name;
      }
    }
}

Foo test = new Foo("test");

Console.WriteLine(test.getName);
  • 在C#中,构造函数是一个与类名相同但没有返回类型的函数

  • 您在变量之前使用其数据类型,例如int xstring yvar xyz;

  • Java / PHP中没有getter / setter方法,它使用属性。因此,属性不会有getXXX()或setXXX()。以下是设置属性的方法

实施例

string _name;
public string Name
{
    get { return _name; }
    set { _name = value; }
}

//Usage

Foo f = new Foo();
f.Name = "John";
string name = f.Name;