c#中的变量,属性,字段

c++中只有成员变量和函数这个概念,然而c#中增加了很多术语:字段,属性,变量,方法,消息,委托。。。

  • 先看看“变量”这个词:这个术语的意思应该就是c++中“变量”的一个更小的子集。限定于函数或者全局的定义,比如int a;用来表示一块内存区域。
  • 字段:应该是特指类中的变量。比如在类中定义一个a,int a; 很奇怪,这就叫字段了。
  • 属性:特指类,接口中对字段操作的一个封装。和字段的差别就是,没有没get,set了。
  • 方法:就是函数了。
  • 消息:这个是c++没有的东西。其实是委托的一个字段?
  • 委托:类似函数指针。

 显然上面的每个术语都是不重复的。比如说,消息既不是属性,也不是字段,也不是方法,消息就是消息,一种新的类型。

 但是经常会听到这么一句话:消息,属性,索引器本质上就是方法。这句话是没错,但是本质上是的方法,并不表示这个几个术语和方法是等价的。


所以就有了下面的说法:

接口中只能包含:方法,属性,消息,索引器。这里没有字段,因为接口是抽象的描述,没有任何实例化的可能,然而字段是占用内存空间的。

抽象类中可以包含:方法,属性,消息,索引器,字段。

 


接口中不能包含:字段,委托。

不能包含字段:很好理解,字段是要内存空间的,而接口仅仅是一段描述。

不能包含委托:其实这也很好理解,委托是什么?委托其实是相当于typedef的一个东西一样,是一个类型,就好比,你不能再接口中些一行代码,这行代码只有int这个一个单词。


接口中关于Event的:

不能直接实例化接口;接口中的方法都是抽象方法,实现接口的任何非抽象类型都必须实现接口的所有成员:

这个很有意思,如果要实现这个接口,也就是说我有一个类,派生自这个接口,那么我这个类要怎么写?

其实大部分和c++一样(纯虚函数)。

1.实现其方法,索引器:也就是把接口中的所以方法在我得派生类中一个不漏的全部写上一遍。当然这里有显式和隐式2种实现方法。

2.实现其属性:这也好理解,就是把属性再来一遍,set,get、

3.实现其event:这个就很奇怪了。。。

因为event没有函数体。比如:系统这个INotifyPropertyChanged这个event

namespace System.ComponentModel
{
    // Summary:
    //     Notifies clients that a property value has changed.
    public interface INotifyPropertyChanged
    {
        // Summary:
        //     Occurs when a property value changes.
        event PropertyChangedEventHandler PropertyChanged;
    }
}

我有一个类从其继承过来,要怎么实现这个event?

代码其实很简单,但是要理解起来应该很费劲,我暂时没有搞明白。

namespace WpfApplication1
{
    class ViewModel : INotifyPropertyChanged
    {
         
        public event PropertyChangedEventHandler PropertyChanged;
                
    }
}

  就是把这行代码拷贝下来,也不需要写什么函数体。。

 

posted on 2017-07-08 14:38  bingbingzhe  阅读(495)  评论(0)    收藏  举报