第五章 定义封装的类类型,static意思是静态

2019-10-07 07:51 来源:未知

1.2.2对象、字段和方法

3.总结:

静态类:

如果一个类,被声明为静态类,那么该类不可以被实例化,也不可以被继承,同时不可以包含非静态成员。
非静态类中,可以包含静态成员。

静态方法:

静态方法中,不可以访问非静态成员。
非静态方法中,可以调用静态和非静态成员。

静态成员的生命周期是:从程序开始到程序结束。

http://msdn.microsoft.com/en-us/library/ms173120(zh-cn,VS.80).aspx.aspx)

构造函数是一个方法,用于初始化对象的所有字段。

2.static的三种用法:

1.用于变量前,表示每次重新使用该变量所在方法、类或自定义类时,变量的值为程序这次运行最后一次为变量赋值时的值,这个方法称为静态函数

private void s()
{
static int a=1;
a++;
}
//方法第一次调用结束后a在内存内值为2;
//方法第一次调用结束后a在内存内值为3;

2.在方法(函数)前用static修饰,表示此方法为所在类或所在自定义类所有,而不是这个类的实例所有,这个方法称为静态方法
情况一:非静态方法:

class t
{
t(....(参数,下面同))
{
~~~~(方法内容,下面同)
}
void s(....)
{
~~~~
}
}
//当你在其他方法里调用这个类中的方法s,则需先声明这个类的变量如:t sd = new t(....);
//再在t里调用方法:sd.s(....);

情况2:静态方法:

class t
{
t(....(参数,下面同))
{
~~~~(方法内容,下面同)
}
static void s(....)
{
~~~~
}
}
//当你在其他方法里调用这个类中的方法s,
//则不用先声明这个类的变量如直接调用方法:t.s(....);

3.用于class前,说明此类型无法新建实例,简单点说这个类型的方法全是静态方法,这个类里的非静态方法是不能使用的,这个类型称为静态类

比如C#控制台操作的Cancle类里面的成员就被标记为静态的,可以直接用Concle.直接点出来使用。
如果没有标记为静态就要通过创建实例对象来调用,比如说动态字符串StringBuilder就要new一个实例来调用

StringBuilder sb =new StringBuilder();
sb.xxx(); //xxx是方法名

static class t
{
~~~~
}
~~~~
class d
{
~~~~
void f(....)
{
~~~~
t v = new t();//此时程序会出现错误
}
}

注意:
1.尽管类的实例包含该类所有实例字段的单独副本,但每个静态字段只有一个副本。
2.不可以使用this来引用静态方法或属性访问器。
3.如果对类应用static 关键字,则该类的所有成员都必须是静态的。
4.类和静态类可以有静态构造函数。 静态构造函数在程序开始和类实例化之间的某个时刻调用。

多态表示的是语言以同一种方式处理相关对象的能力。它允许基类为所有的派生类定义一个成员集合(多态接口),一个类类型的多态接口由任一个虚拟或抽象成员组成。

对象的字段表示其当前的状态;

1.简介static

static意思是静态,可以修饰类、字段、属性、方法,但不能用于索引器、析构函数或类以外的类型。
标记为static的就不用创建实例对象调用了,可以通过类名直接点出来

这个就不想细说了,c#提供特有的一种注释标记,用来产生基于XML的代码文档,这个符号就是三个正斜杠(///),既可以在代码中直接注释,也可以在VS.NET类细节窗口中,输入这些XML代码注释,其好处就是智能感知时能查看这些信息。

1.1.1良好的程序

问:第128页中说默认构造函数自动设置为私有的,应该不对吧?私有的还怎么使用啊?

1.2类和对象

C#提供默认的构造函数,它不接收参数,其作用就是把新对象分配到内存中时,确保所有字段数据都设置为正确的默认值。当然,可以重新定义默认构造函数(不带参数),也可以定义带有参数的自定义构造函数。

修改器也称为设置器,可以更改对象内的某个字段的值。

这样,我们就定义了一个使用许多构造函数来创建具有字段数据(成员变量)和各种成员的类了。

1.1软件开发

类的基本概念:

主要用于描述一组相似的对象,如鸟类、爬虫类等。类是程序的一个封装的组件。

面向对象三个原则:继承、封装、多态。

1.2.5静态与非静态

  • 类型名(上面的emp)必须一致;

  • 定义在相同的命名空间中。

1.2.4访问器和修改器

只需在方法定义前加static即可。注意,静态成员只能操作静态数据或调用类的静态方法,如果尝试调用非静态类数据或非静态方法,将编译错误!

1.1.2面向对象程序设计的特征表现

定义一个属性如下:

1.2.3构造函数(constructor)

5.3  OOP的支柱

设计à实现à测试

属性也可以是静态的哦,当然,静态属性和静态方法的操作是一致的,静态属性只能操作静态数据。

无论何时引用一个非静态字段或者调用一个非静态方法,都必须指定一个特定的实例;静态方法是关于整个类的,而不是关于单个实例的。静态方法有时称为类方法(calss method)。非静态方法有时称为实例方法(instance method);任何类的main()方法都必须是静态方法。这是由于它可能是运行的第一个方法。

需要强调的是,这两种方法的使用目的是一致的,属性优点就是对象的用户可以只使用一个命名项就能操作内部数据。

1.2.1类

public class MyClass
{
    int a=0;
    //int b=this.a;//成员变量初始值处不能用this
public static void RunSnippet()
{
    //public int c=this.a;//静态方法中不能用this;
}
}

特点:正确、高效、通用、快速开发。

那么此处的访问仅仅限定在声明的类型内部来访问,只符合上述三种访问方式的第一种。也就是说,不能通过点运算符在外部来访问,更不用说是被继承的访问了。

1.1.3软件开发周期

(3)定义静态构造函数

访问器也称为读取器,可以返回某个字段的值。

接下类,可以将生成的xml文件转换为用户更友好的帮助格式,VS.NET没有提供这个功能,但是可以用第三方工具(NDOC或者sandcastle)来生成。这样就能看到诸如MSDN这样的帮助系统啦。

封装、继承、多态。

注意:常量的定义必须用基元类型,字段的定义可以是任何类型。

对象的方法是对象可以执行的动作。

 

封装

类的构造函数:

.net2.0之后,支持静态类的概念。它用来扩展static关键字的使用。如果一个类被定义为静态的,就不能使用new关键字来创建,只能包含用static关键字标识的成员或字段,如果我们创建一个只包含静态成员或者常量数据的类,这是个好的选择(之前为了不让类被实例化,只能将默认构造函数重定义为private,或者用abstract关键字表示为抽象类型)。有了这种类,就更加简洁、类型更加安全。

(4)定义静态类

注:这里所说的对于成员的访问,如果在前面不加修饰语句的话,其一是在定义方法的类型中直接访问,其二是通过点运算符在定义此方法类型的外部进行的此类型的类级别访问(若是静态方法或静态成员变量)或者此类的对象级别访问(非静态方法或非静态成员变量),其三包括通过经典继承从而使得子类可继承成员。有了这个概念,下面的就比较容易理解了,下面的访问也应该从这三个方面来理解。

答:是这样的,如果类没有给出默认构造函数,则系统提供的默认构造函数确实不是私有的,如果是自己写的默认构造函数,并且不加修饰,则就是私有的,无法访问,因此必须加上public修饰符。

(1)定义一对传统的访问方法和修改方法

C#类和结构都可以通过static关键字来定义许多静态成员。如果这样的话,这些成员就只能通过类级别而不是实例级别来调用。简言之,静态方法是被认为是非常普遍的项,并且不需要在调用成员时创建类型的实例,虽然任何类或结构都可以定义为静态方法,但是它们通常出现在“工具类”中。

  • protected internal(或者internal protected )修饰类的成员或嵌套类型,在定义它的程序集或类型中或者派生类中可用。其含义是“访问范围限定于此程序集那些由它所属的类派生的类型”。

C#中的构造函数是一种特殊方法,在使用new关键字创建对象时被间接调用,它不会有返回值(void都不行),名字和类名一致。

属于

默认的成员可访问性

该成员允许的声明的可访问性

enum

public

class

private

public

protected

internal

private

protected internal

interface

public

struct

private

public

internal

private

注意:访问器的可访问性修饰符必须比属性或索引器具有更强的限制。

5.1类类型和及其构造函数

和常量数据不同的是,只读字段不是隐式静态的,此时需要实例化后,用对象.只读字段来访问。因此,如想从类级别进行访问也就是静态只读字段,应该使用static来修饰这个只读字段,如static readonly。当然,若这个静态只读字段也是只能在运行时才能赋值,则这个值应该在静态的构造函数中进行赋值。

对于对象的状态(用成员变量表示),可以一个个去赋值,这对于一个小的类是可以的,但是若拥有很多字段的字段,每次都一个个赋值,是不可想象的。这就需要构造函数,它可以在使用对象之前先给对象的字段数据赋相关的值,也就是初始化操作。

这句话比较难以理解,稍微详细解释一下:如果某类有一个成员声明为protected internal,则位于同一程序集的类可以访问此成员,但位于另一个程序集中的类不可访问它,除非这个位于另一个程序集的类是这个成员所在类的子类。 这其实是internal和protected的可访问性的并集,符合任何一个都行。

另外,也不能对两个访问器set和get同时设置修饰符,会提示“不能为属性的两个访问器同时指定可访问性修饰符”。还需要注意的是,对于set或get域的访问修饰符,一定不能比此属性的修饰符的可访问性大哦。

  • public:修饰类型(或结构)或者类型的成员,没有限制,在内部或外部程序集均可访问;
  • private修饰类的成员或嵌套类型,由定义他们的类(或结构)访问;

它使用一种叫做“构造函数链”的技术来设计类,当一个类中存在多个构造函数,并且构造函数中存在冗余代码(比如都要进行某种检查验证等),这可以使用。

(2)定义静态数据

TAG标签:
版权声明:本文由www.129028.com-澳门金沙唯一官网www129028com发布于编程新闻,转载请注明出处:第五章 定义封装的类类型,static意思是静态