今天复习面向对象,猛地一看,发现几个不懂的地方。进来讨论讨论把?

颤菊大师 2008-12-17 08:42:02
接口的属性:
请看以下代码:
    public interface IMyInterface
{
void DoSomething();
void DoSomethingelse();
int DoThis { get; }
}
public class MyClass : IMyInterface
{

#region IMyInterface 成员

public void DoSomething()
{
throw new NotImplementedException();
}

void IMyInterface.DoSomethingelse()
{
throw new NotImplementedException();
}
protected int x;
public int DoThis
{
get { return x; }
set { x = value; }
}
#endregion
}
class Program
{
static void Main(string[] args)
{
MyClass m = new MyClass();
m.DoThis = 1;
Console.WriteLine(m.DoThis.ToString());
Console.ReadKey();
}
}


那么我就疑惑了,如果按照常理,接口定义了get访问性,基类里不应该可以set。到底怎么回事呢?
接口里的属性定义的可访性,倒不如不为空。可是为空又提示必须要有其一。
那么想必有什么作用吧?
...全文
81 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
颤菊大师 2008-12-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 vrhero 的回复:]
什么叫常理?没有这种常理...

接口IMyInterface约定必须有一个可get的int类型属性DoThis...MyClass实现了该属性,有没有set IMyInterface管不着也不需要管...


接口只规定必须有什么,可不管你没有什么或多出来什么...
[/Quote]
就是要这么通俗的话。醍醐灌顶。谢谢!
谢谢所有回答的朋友。!
net5i 2008-12-17
  • 打赏
  • 举报
回复
属性其实就是由一个Get方法和一个Set方法组成的,也就是说你相当于在接口里定义了get方法,
你怎么能限制我在实现类里面再定义一个set方法呢?搂主可以想想。

接口是很灵活的,只要实现类里面的形式以及参数一致,那就算是符合接口了,所以只要你的实现类里面
有我定义的get方法就可以了,不强求set方法
vrhero 2008-12-17
  • 打赏
  • 举报
回复
什么叫常理?没有这种常理...

接口IMyInterface约定必须有一个可get的int类型属性DoThis...MyClass实现了该属性,有没有set IMyInterface管不着也不需要管...


接口只规定必须有什么,可不管你没有什么或多出来什么...
ginni215 2008-12-17
  • 打赏
  • 举报
回复
接口只是定义一个最通用的,方便其他类去实现,但类要去实现就必须都要实现,
所以为了一些仅有只读的属性的类,在接口里只定义了只读,
要是在接口里把写的属性也定义了,那实现他的类都必须也要有写的属性,
所以为了通用这样写也是有好处的~~
颤菊大师 2008-12-17
  • 打赏
  • 举报
回复
1楼的是否可以稍微详细说下?
jackljane 2008-12-17
  • 打赏
  • 举报
回复
可扩展但至少必须实现全部的成员

111,130

社区成员

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

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

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