猿问

关于C# 的问题

最近在自学c#,被里面的一些定义搞得晕头转向的,感觉好多都可以省略,干嘛搞得那么复杂。
1.既然实例化都是我用属性,那我可以不使用字段吗
2.接口和类又什么区别
3什么时候用静态方法,什么时候用实例方法。

慕UI0956640
浏览 1189回答 1
1回答

a_flying_fish

第一个问题:属性是对字段的封装,说白了,类中实际能够存储数据的还是字段,没有字段,属性不就没用了吗。不考虑安全性的情况下,属性倒是显得多余。实际上,属性很有必要,通过对字段的封装,实现对字段的安全访问 第二个问题:接口是特殊的类,是一种抽想到极致的类。有的时候,我们希望写一个函数,传入不同类型的类参数,但是他们都具备同一种方法(多态),这种情况下普通的继承也是可以的,但是最原始的基类中需要定义这个方法,但是函数体显得没有意义,接口中提供的这种不需要定义函数体,只需要声明函数原型,使得代码更简洁。        这个时候你可能会问,为什么一定要创造一个新的关键字interfance,理由很简单,C++中就是没有这个关键字的,也没有abstract这些复杂的关键字,为什么呢,因为C++这种语言支持多继承,即一个子类,同时继承多个父类。因此任何类,不论是接口类还是抽象类还是普通类,一律都能直接继承多个。但是C#不行啊,规定只能有一个基类,要继承多个,除非其余的都是接口类。这个怎么控制呢,就需要interfance来把关了,所以interfance是为了显示说明接口类,使得多继承的时候不至于混乱 第三个问题:静态方法属于类,普通方法属于对象。在调用静态方法的时候,可能没有实例化对象,所以只有静态字段和属性可以调用,这种情况下,我们可以认为,静态方法是用来调用静态字段或者属性的。普通方法是用来调用普通字段的。如果你学过C语言或者C++语言,你会发现,C#中的静态字段更像是一个全局变量,而静态方法是为了更方便的利用这个全局变量。
随时随地看视频慕课网APP
我要回答