0

我知道很多 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

感谢帮助!

4

3 回答 3

9

如果您真的缺少魔法方法,您可以在 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 myObject = new MyModelType();

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

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

于 2015-08-14T07:44:21.307 回答
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#中,Constructor是一个与类名同名且没有返回类型的函数

  • 您可以在变量前面加上它们的数据类型,例如int x,string 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;
于 2012-10-21T20:44:43.633 回答
-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#。

于 2012-10-21T20:42:00.720 回答