C#如何重载属性,并同时扩展属性的访问方式?

苏丹-陈 2008-02-14 10:10:43
如何才能同时重载基类的get方法,又添加一个新的set方法。
class baseA{
public virtual string NamespaceURI{
get{ return string.Empty;}
}
}

class clsB :baseA{
string _ns;
public override string NamespaceURI{
get{ return _ns;}
set{ _ns = value;}
}
}
...全文
2628 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
laxiang1 2011-09-25
  • 打赏
  • 举报
回复
如果我想通过重载属性方法,来给这个属性赋值,每次我调用该属性的时候,他不就可以自动赋值了,但是我不知道这样实现合适不
hushuanhule 2010-09-02
  • 打赏
  • 举报
回复
DDDDDDDDDDDDDDD
pearl_jam 2008-03-23
  • 打赏
  • 举报
回复
这个是我随便写的例子,关于new的用法.
测试成功了.
派生类可以set,基类只能get

class Program
{
static void Main(string[] args)
{

BB b = new BB();
b.B = 1000;
AA a = (AA)b;
b.print();

Console.ReadLine();
}
}

public class AA
{
protected int a = 10;
protected int b = 11;
public int A
{
get { return this.a; }
set { this.a = value; }
}
public int B
{
get { return this.b; }
}

public void print()
{
Console.WriteLine(B);
}
};

public class BB : AA
{
private static object obj = new object();

public void print()
{
Console.WriteLine(B);
}

public new int B
{
get { return this.b; }
set { this.b = value; }

}
public BB()
{

}

public BB(AA a)
{
lock(obj)
{

}
this.a = a.A;
}
};

pearl_jam 2008-03-23
  • 打赏
  • 举报
回复
试图对属性的访问器方法之一进行重写时失败,因为访问器不能重写。可以通过下面的方法解决该错误:

在基类中添加 set 访问器。

从派生类中移除 set 访问器。

通过在派生类的属性中添加 new 关键字来隐藏基类属性。

生成基类属性 virtual。

有关更多信息,请参见属性声明和使用属性(C# 编程指南)。



// CS0546.cs
// compile with: /target:library
public class a
{
public virtual int i
{
get
{
return 0;
}
}

public virtual int i2
{
get
{
return 0;
}

set {}
}
}

public class b : a
{
public override int i
{
set {} // CS0546 error no set
}

public override int i2
{
set {} // OK
}
}
苏丹-陈 2008-02-14
  • 打赏
  • 举报
回复
对new我的理解是这样的。好像也测试过一次。
如果使用new方法:
(v as baseA).NamespaceURI 返回string.Empty;
(v as clsB).NamespaceURI 返回 _ns的值。
使用new关键子,不具有动态特性。
Tensionli 2008-02-14
  • 打赏
  • 举报
回复
new public virtual string NamespaceURI{
get{ return string.Empty;}
}
ms44 2008-02-14
  • 打赏
  • 举报
回复
在Set前使用New关键字。。

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧