积极答复者
关于接口的定义

问题
答案
-
就是 为什么 C# 中允许接口定义属性 这个,请问有没有形象的描述
我不太了解 C# 的文法编写者的意图,我只能从已有的语法中来推导:
1、class 允许定义属性,如下:
public class A
{
int Age{get;set;}
}
2,在 C# 中,属性等价于下面的代码:
int get_Age();
void set_Age(int value);
PS:你需要问为什么 C# 中允许类定义属性吗?
3、class 可以继承 interface,如下:
public interface IA
{
}
public class A : IA
{
}PS:你需要问为什么 C# 允许 class 可以继承 interface 吗?
4、如果我想通过 IA 来访问实现类 A 的 Age 属性的话,及我可以写如下代码:
IA a = new A;
int age = a.Age;
那么,请问,通过基类或者接口来访问实例的属性是不是编程中需要的一项基本功能?这项基本功能同通过基类或接口来访问实例的方法冲不冲突?
-
您说的我大概都明白了,不如我举个例子,看看我有没理解错
比如说
接口 番茄炒蛋,声明了能做番茄炒蛋,
属性 声明了需要哪些材料,具体怎么获得,什么分量不说
方法 声明了了番茄炒蛋是有方法做的,具体怎么做不说
就是这里 Interface A{get;set}
由于 Interface 也是声明了能做什么,所以A就不知道它是什么角色,就是卡在这个点上
你完全没必要把接口、属性、方法的概念搞的这么复杂,而且你这种比喻是不恰当的,因为 C# 文法并没有要求属性、方法一定要严格的区分职能,也就是说下面的代码都可以完成相同的任务:
public interface IA
{
IB B{get;set;}
}
public interface IA
{
IB GetB();
void SetB(IB b);
}
我甚至还可以这样写:
public interface IA
{
IB sdklfjsldfjdlskfjsdkljflsdkjfldksf();
void sdfjsdjflksdjflksdjfklsdjf234kjlkjdsf(IB b);
}
全部回复
-
public interface IMapBookmarks
{
IEnumSpatialBookmark Bookmarks { get; }
void AddBookmark(ISpatialBookmark bookmark);
我也不知道为什么接口能这样定义
void RemoveAllBookmarks();
.
void RemoveBookmark(ISpatialBookmark bookmark);
}我不知道你到底对 C# 语法都了解些什么,所以我有必要先测试你知道什么,你知道接口为什么能这样定义吗?
public interface IMapBookmarks
{
IEnumSpatialBookmark GetBookmarks();
}
-
就是 为什么 C# 中允许接口定义属性 这个,请问有没有形象的描述
我不太了解 C# 的文法编写者的意图,我只能从已有的语法中来推导:
1、class 允许定义属性,如下:
public class A
{
int Age{get;set;}
}
2,在 C# 中,属性等价于下面的代码:
int get_Age();
void set_Age(int value);
PS:你需要问为什么 C# 中允许类定义属性吗?
3、class 可以继承 interface,如下:
public interface IA
{
}
public class A : IA
{
}PS:你需要问为什么 C# 允许 class 可以继承 interface 吗?
4、如果我想通过 IA 来访问实现类 A 的 Age 属性的话,及我可以写如下代码:
IA a = new A;
int age = a.Age;
那么,请问,通过基类或者接口来访问实例的属性是不是编程中需要的一项基本功能?这项基本功能同通过基类或接口来访问实例的方法冲不冲突?
-
您说的我大概都明白了,不如我举个例子,看看我有没理解错
比如说
接口 番茄炒蛋,声明了能做番茄炒蛋,
属性 声明了需要哪些材料,具体怎么获得,什么分量不说
方法 声明了了番茄炒蛋是有方法做的,具体怎么做不说
就是这里 Interface A{get;set}
由于 Interface 也是声明了能做什么,所以A就不知道它是什么角色,就是卡在这个点上
你完全没必要把接口、属性、方法的概念搞的这么复杂,而且你这种比喻是不恰当的,因为 C# 文法并没有要求属性、方法一定要严格的区分职能,也就是说下面的代码都可以完成相同的任务:
public interface IA
{
IB B{get;set;}
}
public interface IA
{
IB GetB();
void SetB(IB b);
}
我甚至还可以这样写:
public interface IA
{
IB sdklfjsldfjdlskfjsdkljflsdkjfldksf();
void sdfjsdjflksdjflksdjfklsdjf234kjlkjdsf(IB b);
}