平时写代码也就依照样子画葫芦,重复着相同的工作,也很无聊,现在开始整理下,一些基础知识,都已经快忘记光了,写下来记录下,平时还可以重温下。
什么是属性?
比如:
public class A{
public int Id{get;set;}
public string Name{get;set;}
}
上面是一个类,那么我们要访问的属性,就是:
A model=new A();//调用类
A.Id//Id就是属性
平时我们都是这么来写代码的。分析下:官网说法:属性结合了字段和方法的多个方面。对于对象的用户,属性显示为字段,访问该属性需要完全相同的语法。对于类的实现者,属性是一个或两个代码块,表示一个 get 访问器和/或一个 set 访问器。当读取属性时,执行 get 访问器的代码块;当向属性分配一个新值时,执行set 访问器的代码块。不具有 set 访问器的属性被视为只读属性。不具有 get 访问器的属性被视为只写属性。同时具有这两个访问器的属性是读写属性。
官网的说法,还是蛮好的。一看就明白了。通俗点说就是通过get和set两个东东去设置的熟悉,调用的话,对象中调用我们叫属性,类中书写,就是set和get的方法。
好吧,我们会通常说属性基本上就是字段的应用了。
public class Date { private int month = 7; //"backing store" public int Month { get { return month; } set { if ((value > 0) && (value < 13)) { month = value; } } } }Date model=new Date();//Month=7,month=7;model.Month=9;//Month=9,month=9; 当我们初始化model的时候,去执行Date类,那么开始从上到下执行,month是一个private私有变量,只有内部访问,也就是说外部(其他类型或者成员)不能直接调用,只有在Date里面自己调用自己,那不就是说,我们只能在Date类里面改自己的值了。Month是public,声明属性的话,默认是public,不解释了。看看里面的get和set。get就是去得到这个属性的值,这里的return month那么Month是值就是month的值7了,set就是去设置这个值看看是否符合要求,这里是 Month 值设置为 1 和 12 之间,那么结果就是Month=7,month=7;看看model.Month=9;这不就是去set嘛,好吧就是,那么判断是否是1到12之间,是的话,month=value。结果就是:Month=9那么此时的month呢?我们不是看到了month=value那么month也是9了。
知识点:类型就是enum(枚举类型),class(类),interface(接口),struct(结构)等类型。类型成员如函数,成员变量等。
我们现在开始看看,几个不同的例子:
1.mode.Month=125;//Month=9,month=9;
2.如果Date里面加上,
public int num { get; set; }
public string str { get; set; }
这个不就是我们常常这样子写的,那么初始化的话,int默认是0,str为null,后面一样的原理set和get了。
3.如果在Date里面的Month里面的set里面设置:
public int Month { get; set; }//初始化Month为0
4.如果去掉month:那么这样子就会出错。
public int Month
{
get
{
return month;
}
set
{
if ((value > 0) && (value < 13))
{
month = value;
}
}
}
属性结束了,想想还是很简单不就是set和get。
什么是继承?
概念什么自己去百度吧,我的理解就是父类和子类,比如:
class A{//父类
****一些方法属性****
}
class B:A{//子类
****一些方法属性****
}
B既然继承了A的所有方法和属性,那么我就直接用吧,当然每个人都有秘密,A也不例外,A也有一些不想告诉你的,那么A就private了,B说我想看private的,A说抱歉哦不给你看哦。
关键点:
1.子类拥有父类非private得属性和功能;
2.子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能;
3.子类还可以以自己的方式实现父类的功能(即方法重写)。
当然还有protected这个东东,protected修饰符表示继承时子类可以对父类有完全访问权。
class B:A{//子类
public B():base();//子类构造方法需要调用父类同样参数类型的构造方法,用base关键字代表父类
****一些方法属性****
}
对于调用父类的成员,可以用base关键字。
构造方法:B的构造方法就是B(),那么A的就是A()这个c#就是默认的,但是我们可以根据我们的要求去书写自己的构造方法,比如在A中写一个带参数的构造方法,如:A(string name)
如果是继承怎么写,很简单就是:
public B(string name):base(name){
}
就是这么的任性。
如果理解有误,请指出。