代码如下:
interface IName
{
string name
{
get;
set;
}
}
class Progman:interface
{
string IName.name
{
get;
set;
}
}怎么显示错误:错误
Console接口.Program.Console接口.IName.name.get”必须声明主体,因为它未标记为 abstract 或 extern
Console接口.Program.Console接口.IName.name.set”必须声明主体,因为它未标记为 abstract 或 extern
怎么改 刚刚学
interface IName
{
string name
{
get;
set;
}
}
class Progman:interface
{
string IName.name
{
get;
set;
}
}怎么显示错误:错误
Console接口.Program.Console接口.IName.name.get”必须声明主体,因为它未标记为 abstract 或 extern
Console接口.Program.Console接口.IName.name.set”必须声明主体,因为它未标记为 abstract 或 extern
怎么改 刚刚学
{
string name
{
get;
set;
}
}
class Progman:interface
{
string IName.name
{
get{return null;};
set{};
}
}
{
get{return _name;};
set{ _name=value };
}
public class BaseClass
{
public virtual void DoWork() { }
public virtual int WorkProperty
{
get { return 0; }
}
}
public class DerivedClass : BaseClass
{
public override void DoWork() { }
public override int WorkProperty
{
get { return 0; }
}
}例如:
DerivedClass B = new DerivedClass();
B.DoWork(); // Calls the new method.BaseClass A = (BaseClass)B;
A.DoWork(); // Also calls the new method.
当派生类重写某个虚拟成员时,即使该派生类的实例被当作基类的实例访问,也会调用该成员。
这句话是什么意思
比如
class A
{
public virtual string P { get; set; }
}
class B : A
{
private string _p;
public override string P
{
get { Console.WriteLine("b.p"); return _p; }
set { Console.WriteLine("b.p"); _p = value; }
}
}
调用:
A b = new B(); //虽然是A类型,但是实例化一个B的实例
string s = b.P; //调用的是 b.p 而不是 a.p
这很好理解,实际上属性就是方法。
比如
class A
{
public string P { get; set; }
}
其实就是
class A
{
public string get_P() { ... }
public void set_P(string value) { ... }
}
{
string name
{
get;
set;
}
}
class Progman:interface?????{
string IName.name
{
get;
set;
}
}
interface IName
{
string name
{
get;
set;
}
}
class Progman:interface?????{
string IName.name
{
get;
set;
}
}这个编译错误!因为在类里实现接口的属性,不能省略!
class Progman:interface?????
{
private string _name;
string IName.name
{
get{ return _name;}
set{ _name=value;}
}
}
还有别的改别法吗
已经告诉你了,没看?自动属性是C# 3.0新增的语法。之所以你不能编译,是因为你在使用C# 1.x(2002 2003) 或者 2.0(vs2005)