在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
感谢您的帮助!
答案 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 x
,string y
或var 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;