学习CLR via C#(第4版)(三)- 基元类型、引用类型和值类型
基元类型、引用类型和值类型
5.1编程语言的基元类型
FCL(Framework Class Library) Framework 类库,FCL是 .net Framework 包含的一组DLL程序集的统称,FCL包含了提供了很多功能,它是生成.NET Framework 应用程序、组件和控件的基础。FCL由命名空间组成。每个命名空间都包含可在程序中应用的类、结构、委托和接口等。常见的命名空间有System、System.Windows等。
什么是基元类型
编译器直接支持的数据类型称为基元类型(primitive type)。基元类型直接映射到Framework类库(FCL)中存在的类型。比如以下4行代码都是正确的,生成的IL代码也是相同的。
int a = 0;
System.Int32 a =0;
int a = new int();
System.Int32 a = new System.Inte32();
下表列出了FCL类型在C#中对应的基元类型:
C#基元类型 | FCL类型 | 符合CLS | 说明 |
---|---|---|---|
sbyte | System.SByte | NO | 有符号8位值 |
byte | System.Byte | YES | 无符号8位值 |
short | System.Int16 | YES | 有符号16位值 |
ushort | System.UInt16 | NO | 无符号16位值 |
int | System.Int32 | YES | 有符号32位值 |
uint | System.UInt32 | NO | 无符号32位值 |
long | System.Int64 | YES | 有符号64位值 |
ulong | System.UInt64 | NO | 无符号64位值 |
char | System.Char | YES | 16位Unicode字符 |
float | System.Single | YES | IEEE32位浮点值 |
double | System.Double | YES | IEEE64位浮点值 |
bool | System.Boolean | YES | 一个true/false值 |
decimal | System.Decimal | YES | 一个128位高精度浮点值,常用于不容许舍入误差的金融计算 |
string | System.String | YES | 一个字符数组 |
object | System.Object | YES | 所有类型的基类型 |
dynamic | System.Object | YES | 对于CLR,dynamic和object完全一致。然而,C#编译器允许使用一个简单的语法,让dynamic变量参与动态调度 |
可以假定C#编译器自动假定在所有的源代码文件中添加了以下using指令:
using sbyte = System.Sbyte;
using byte = System.Byte;
using int = System.Int32;
using uint = System.UInt32;
......
表达式由字面量构成,编译器在编译的时候就能完成表达式求值
Boolean found=false;//生成的代码将found设为0
Int32 x=100+20+3;//x设为123
String a="a"+"bc";//s设为“abc”
checked和unchecked基元类型操作
此指令就用来检查溢出和不检查溢出,而默认是unchecked,不过这个可以改。检查溢出就报异常,不检查溢出就回滚。
对基元类型执行许多算数运算都可能造成溢出。不同语言处理溢出也是不同的。C和C++不将溢出视为错误,并允许值回滚;应用程序"若无其事"的运行着。相反,Microsoft Visual Basic总是将溢出视为错误,并会抛出异常。
CLR提供了一些特殊的IL指令,允许编译器选择它认为最恰当的行为。CLR有一个add指令,将两值相加但不检查溢出。还有一个add.ovf指令,作用是两值相加,溢出时抛出异常。类似的还有sub/sub.ovf等。
C#允许开发人员自己决定如何处理溢出。溢出检查默认是关闭的。开发人员可以使用C#编译器控制溢出的一个办法是使用/checked+编译器开关。
C#通过提供checked和unchecked操作符来实现局部是否检查发生溢出。
unchecked:
UInt32 invalid = unchecked((UInt32)(-1)); //OK
checked:
Byte b = 100;
b = checked((Byte)(n+200)); //抛出溢出异常 C#还提供checked和unchecked语句checked{Byte b = 100;b = checked((Byte)(n+200));
}
在Visaul Studio的"高级生成设置"对话框中可以指定编译器是否检查溢出。
System.Decimal类型是一个非常特殊的类型。虽然C#将Decimal视为一个基元类型,但CLR则不然,也就是说CLR没有相应的IL指令来决定如何处理Decimal值。Decimal值得处理速度是要慢于其他CLR基元类型的值得处理速度。还有对Decimal来说,checked和uncheked操作符、语句和编译器都是无效的,Decimal溢出时是一定会抛出异常的。
5.2引用类型和值类型
CLR支持两种类型:引用类型和值类型。
值类型
虽然FCL中大多数都是引用类型,但开发人员用的最多的还是值类型。引用类型总是在托管堆上分配的,C#的new操作符会返回对象的内存地址——也就是指向对象数据的内存地址。
使用引用类型必须注意到一些性能问题,首先考虑一下事实:
1)内存必须从托管堆上分配。
2)堆上分配的每个对象都有一些额外的成员(比如前面提到过得"类型对象指针"和"同步块索引"),这些成员必须初始化。
3)对象中的其他字节(为字段而设)总是设为零。
4)从托管堆上分配一个对象时,可能强制执行一次垃圾回收操作。
如果所有类型都是引用类型,应用程序的性能会显著下降。为了提升简单的、常用的类型的性能,CLR提供了名为**“值类型”**的轻量型类型。
值类型的实例一般在线程栈上分配的(虽然也可作为字段嵌入一个引用类型的对象中)。在代表值类型的实例的一个变量中,并不包含一个指向实例的指针。相反,变量中包含了实例本身的字段。
由于变量已经包含了实例的字段,所以为了操作实例中的字段,不再需要提供一个指针。值类型的实例不受垃圾回收器的控制。因此,值类型的使用缓解了托管堆中的压力,并减少了一个应用程序在其生存期内需要进行的垃圾回收次数。
.NET Framework SDK文档明确指出,在查看一个类型时,任何称为"类"的类型都是引用类型。如System.Exception类、System.Random类等引用类型。文档将所有值类型都称为结构或枚举。如System.Int32结构、System.Boolean结构等值类型。
所有值类型都必须从System.ValueType派生。所有枚举类型都从System.Enum抽象类派生,而System.Enum又是从System.ValueType派生的。CLR和所有编程语言都给予枚举特殊待遇,以后会提到。
所有值类型都是隐式密封的(sealed),目的是防止将一个值类型用于其他任何引用类型或值类型的基类型。
在托管代码中,要由定义类型的开发人员决定在什么地方分配类型的实例,使用该类型的人对此并无控制权。
//引用类型
class SomeRef
{ public Int32 x;
}
//值类型
struct SomeVal
{ public Int32 x;
} static void Main(string[] args)
{ SomeRef r1 = new SomeRef(); //在堆上分配SomeVal v1 = new SomeVal(); //在栈上分配r1.x = 5; v1.x = 5; Console.WriteLine(r1.x); //5 Console.WriteLine(v1.x); //5 SomeRef r2 = r1; SomeVal v2 = v1; r1.x = 8; v1.x = 9; Console.WriteLine(r1.x); //8 Console.WriteLine(r2.x); //8 Console.WriteLine(v1.x); //9 Console.WriteLine(v2.x); //5
}
建议条件
除非以下条件都能满足,否则不应该将一个类型声明成值类型:
1)类型具有基元类型的行为。
2)类型不需要从其他任何类型继承
3)类型也不会派生出其他类型。
类型实例的大小应该在考虑之列,因为默认情况下,实参是以传值方式传递的,这会造成对值类型实例中的字段进行复制,从而影响性性能。同样的,被定义为返回一个值类型的一个方法在返回时,实例中的字段会赋值到调用者分配的内存中,从而影响性能。
所以,选用值类型还应满足:
1)类型的实例较小(约16字节或者更小)
2)类型的实例较大(大于16字节),但不作为方法的实参传递,也不从方法返回。
值类型的主要优势在于它们不作为对象在托管堆上分配。
值类型和引用类型的区别:
1)值类型对象有两种表示形式:未装箱(unboxed)和已装箱(boxed)。引用类型总是处于已装箱形式。
2)值类型是从System.ValueType派生的。该类型提供了与System.Object定义的相同的方法。然而,System.ValueType重写了Equals方法和GetHashCode方法。由于这个默认实现存在性能问题,所以定义自己的值类型时,应该重写Equals和GetHashCode方法,并提供它们的显示实现。
3)值类型的所有方法都不能是抽象的,而且所有方法都是隐式密封(sealed)方法。
4)引用类型的变量包含的是堆上的一个对象的地址。默认情况,在创建一个引用类型的变量时,它被初始化为null,表明引用类型的变量当前不指向一个有效对象。相反,值类型初始化是,所有的成员都会初始化为0。由于值类型的变量不是指针,所以在访问一个值类型时,不会抛出NullReferenceException异常。CLR确实提供了一个特殊的特性,能为值类型 添加"可空"标识。如"int?"
5) 将一个值类型的变量赋给另一个值类型变量,会执行一次逐字段复制。将引用类型赋给另一个引用类型时,只复制内存地址。
6)由于未装箱的值类型不再堆上分配,所以一旦定义了该类型的一个实例的方法不再处于活动状态,为他们分配的内存就会被释放。这意味着值类型的实例在其内存被回收时,不会通过Finalize方法接收到一个通知。
引用类型和值类型的区别:
引用类型 | 值类型 |
---|---|
从托管堆中分配 | 从线程的堆栈中分配 |
对象考虑垃圾回收机制 | 不考虑垃圾回收机制 |
所有类都是引用 | 结构或枚举都是值类型 |
System.Object | 继承自System.ValueType |
只有装箱形式 | 有两种形式:装箱和未装箱 |
可以继承和派生 | 不能作为基类,不能有虚方法 |
引用类型变量初始化时默认为null | 初始化时默认为0值 |
复制时只拷贝内存地址 | 复制时“字段对字段”的拷贝 |
何时使用struct, 何时使用class?
同时满足以下三个条件:
**1)**类型中没有成员会会修改类型的实例字段;
**2)**类型不需要从其它任何类型继承;
3)类型不会派生出其他任何类型;
并满足以下两个条件中的一个:
**1)**类型的实例小于16字节;
**2)**类型的实例大于16字节,但不作为方法的实参传递,也不作为方法的返回值。此时,可以把这个类型定义为struct, 否则定义为class.
定义一个值类型应该注意什么?
1)由于System.ValueType重写了Equals方法和GetHashCode方法,在定义自己的值类型时,也要重写这两个方法并提供它们的显式实现;
**2)**所有方法都不能是虚方法。
SomeVal为一个struct,包含一个实例字段x, 以下代码有何不同?
SomeVal v = new SomeVal();
SomeVal v;
两行代码都会在线程栈上分配内存空间,唯一的不同在于C#会认为new操作符对v进行了初始化。如果用第一行代码定义v, 打印v.x时会打印出默认值0, 如果使用第二行代码定义v, 打印v.x时会出错。
5.3值类型的装箱和拆箱
装箱过程
在CLR中为了将一个值类型转换成一个引用类型,要使用一个名为装箱的机制。
将值类型转换为引用类型。当我们把值类型参数传递给需要引用类型参数的方法时,会自动进行装箱操作。过程如下:
- 从托管堆为要生成的引用类型分配大小。大小为:值类型实例本身的大小+额外空间(类型对象指针和同步块索引SyncBlockIndex)。
- 值类型的字段复制到新的分配的堆内存
- 返回托管堆中新分配内存的地址。也就是指向对象的引用。
拆箱过程
拆箱不是直接将装箱过程倒过来。拆箱的代价比装箱低得多。拆箱其实就是一个获取一个指针的过程,该指针指向包含在一个对象中的原始值类型(数据字段)。事实上,指针指向的是已装箱实例中的未装箱部分。所以,和装箱不同,拆箱不要求在内存中复制字节。还有一个重点就是,拆箱之后,往往会紧接着发生一次字段的复制操作。
获取指向对象中包含的值类型部分的指针。一般拆箱之后会进行字段拷贝操作,两个操作加起来才是真正与装箱互反的操作。过程如下:
- 如果引用为Null,则抛出NullReferenceException异常。
- 如果引用对象不是一个期望值类型的已装箱对象,会抛出InvalidCastException异常。
- 返回一个指向包含在已装箱对象中值类型部分的指针。
上面第二条意味着一下代码不会如你预期的那样工作:
public static void Main(){Int32 x = 5;Object o = x;Int16 y = (Int16) o;//抛出InvalidCastException异常
}
在对一个对象进行拆箱的时候,只能将其转型为原始未装箱时的值类型——Int32,下面是正确的写法:
public static void Main(){Int32 x = 5;Object o = x; //对x进行装箱,o引用已装箱的对象 Int16 y = (Int16) (Int32) o; //先拆箱为正确的类型,在进行装箱
}
前面说过,在进行一次拆箱后,经常会紧接着一次字段的复制。以下演示了拆箱和复制操作:
public static void Main() { Point p = new Point(); //栈变量p.x = p.y = 1; object o = p; //对p进行装箱,o引用已装箱的实例p = (Point) o; //对o进行拆装,将字段从已装箱的实例复制到栈变量
}
在最后一行,C#编译器会生成一条IL指令对o进行拆箱,并生成另一条IL指令将这些字段从堆复制到基于栈的变量p中。
再看看一下代码:
public static void Main() { Point p = new Point(); // 栈变量p.x = p.y = 1; object o = p; // 对p进行装箱,o引用已装箱的实例// 将Point的x字段变成2p = (Point) o; // 对o进行拆装,将字段从已装箱的实例复制到栈变量p.x = 2; // 更改变量的状态o = p; // 对p进行装箱,o引用已装箱的实例
}
最后三行代码唯一的目的就是将Point的x字段从1变成2.为此,首先要执行一次拆箱,在执行一次字段复制,在更改字段(在栈上),最后执行一次装箱(从而在托管堆上创建一个全新的已装箱实例)。希望你能体会到装箱和拆箱/复制操作对应用程序性能的影响。
在看个演示装箱和拆箱的例子:
private static void Main(string[] args)
{Int32 v = 5; // 创建一个伪装箱的值类型变量Object o = v; // o引用一个已装箱的、包含值5的Int32v = 123; // 将未装箱的值修改成为123Console.WriteLine(v + "," + (Int32)o); //显示"123,5"
}
你可以看出上述代码进行了几次装箱操作?是3次
主要原因是在Console.WriteLine方法上。
Console.WriteLine方法要求获取一个String对象,为了创建一个String对象,C#编译器生成的代码来调用String对象的静态方法Concate。该方法有几个重载的版本,唯一区别就是参数数量,在本例中需要连接三个数据项来创建一个字符串,所以编译器会选择以下Concat方法来调用:
public static String Concat(Objetc arg0, Object arg1, Onject arg2);
所以,如果像下面写对WriteLine的调用,生成的IL代码将具有更高的执行效率:
Console.WriteLine(v + "," + o); //显示"123,5"
这只是移除了变量o之前的(Int32)强制转换。就避免了一次拆箱和一次装箱。
我们还可以这样调用WriteLine,进一步提升上述代码的性能:
Console.WriteLine(v.ToString() + "," + o); //显示"123,5"
现在,会为未装箱的值类型实例v调用ToString方法,它返回一个String。String类型已经是引用类型,所以能直接传给Concat方法,不需要任何装箱操作。
装箱与拆箱简单总结
装箱就是把本来在栈中的值类型,在堆中新开辟一个内存空间,把值类型的数据复制进去,并增加引用类型都有的类型指针和同步块索引,然后返回这个内存空间引用地址。
拆箱就是反过来,先获取装箱对象中各个字段的地址,再将这些字段包含的值从堆复制到栈。
由上面看出装箱拆箱其实很影响效率,所以写代码的时候应该避免。
另外装箱的值类型,调用自身的函数修改自己的字段的时候并不会修改堆里的数据,只会先转换为值类型,再修改栈里的数据。
如果要修改堆里的数据,只能定义一个接口,让值类型里的函数去实现这个接口,然后想修改堆里的数据,那么就把对象转换为这个接口,那么去修改的话,就会修改堆里的数据。
如果你看不懂上面的话,那么请慎用值类型,作者推荐不要定义任何会修改实例字段的属性或者方法,甚至可以将值类型的所有字段都加上readonly。
其实结构体什么的用类就好了,大的结构体传参啊什么的,搞不好还会引起栈溢出。毕竟每个线程也就1MB的栈空间。
一个值类型调用System.Object类定义的方法会不会发生装箱?
如果值类型重写了System.Object定义的虚方法(Equals, GetHashCode, ToString),调用时不会发生装箱,如果重写的方法中调用了基类的实现,则需要进行装箱;如果值类型调用了非虚方法(GetType, MemberwiseClone),则会发生装箱。
对象相等性和同一性
System.Object类型提供了一个名为Equals的虚方法,它的作用是在两个对象包含相同的值得前提下返回true。如:
public class Object{publick virtual Boolean Equals(Object obj) {//如果两个引用指向同一个对象,它们肯定包含相同的值if ( this == obj ) return true;//假定对象不包含相同的值return false;}
}
对于Object的Equals方法的默认实现来说,它实现的实际是同一性,而非相等性。
下面展示了如何在内部正确实现一个Equals方法。
1)如果obj实参为null,就返回false,因为在调用非静态的Equals方法时,this所标识的当前对象显然不为null.
2)如果this和obj实参引用同一个对象,就返回true。在比较包含大量字段的对象时,这一步有助性能提升。
3)如果this和obj实参引用不同类型的对象,就返回false。一个String对象显然不等于一个FileStream对象。
4)针对类型定义的每个实例字段,将this对象中的值与obj对象中的值进行比较。任何字段不相等,就返回false。
5)调用基类的Equals方法,以便比较它定义的任何字段。如果基类的Equals方法返回false,就返回false;否则返回true;
例如:
public class Object{public virtual Boolean Equals(Object obj) {//要比较的对象不能为nullif (obj == null ) return false;//如果对象类型不同,则肯定不相等if (this.GetType() != obj.GetType()) return false;//如果对象属于相同的类型,那么在它们所有字段都匹配的前提下返回true//由于System.Object没有定义任何字段,所以字段是匹配的return true;}
}
由于,一个类型能重写Object的Equals方法,所以不能再调用这个Equals方法来测试同一性。为了修正这一问题,Object提供了一个静态方法ReferenEquals,其原型如下:
public class Object{public static Boolean ReferenceEquals(Object objA , Object objB) {retuen ( onjA == objB );}
}
如果想检查同一性,务必调用ReferenceEquals,而不应该使用C#的== 操作符,因为 == 操作符可能被重载。
System.ValueType(所有值类型的基类)重写了Object的Equals方法,并进行了正确的实现来执行值得相等性检查。
对象的相等性和同一性简单总结
之前我们讲过System.Object提供了名为Equals的虚方法,也就是说所有的对象都是有的,作用实在两个对象包含相同值的前提下返回true。
然而这个方法只是比较了同一性,而不是相等性。
实际上就是对应的同一性就是指两个对象的引用相同,也就是说它们指向同一个对象。
相等性如字面意思可知。也就说如果具备同一性,那么一定具备相等性。
由于Equals是个虚方法,可以重写,所以并不一定就是这个用法。
(System.ValueType就重写了,Equals实现的是相等性而不是统一性。但是这个Equals里的实现步骤用到了反射,而反射这个东西又是比较慢的,所以定义自己的值类型时可以考虑重写,从而提高性能。)
而==这个操作符也是可以重载的,除非你在比较之前,将两个对象的类型都转换为object。
于是Object又提供了一个静态方法,Object.ReferenceEquals,效果就如上所述,比较同一性。
注意,如果自己去定义一个值类型,然后重写Equals方法去实现相等性。那么应该注意让类型实现IEquatable接口的Equals方法(通常实现的Equals方法除了调用自己的类型参数,还应该有一个重载函数调用object参数,以便在内部调用类型安全的Equals方法。这个定义接收object对象的重写函数么就是对IEquatable的Equals的实现),还有重写==和!=操作符方法。
考虑到排序,所以可能还需要实现IComparable的CompareTo方法,和IComparable的类型安全的CompareTo方法。实现了这些方法,那么<,<=,>,>=在内部调用类型安全的CompareTo方法也OK了。
(如果你觉得上面自己定义值类型的实现还有什么地方觉得遗漏,最好的方法其实就是去看int类型的定义就ok了)
5.4对象哈希码
FCL的设计者认为,如果能将任何对象的任何实例放到一个哈希表集合中,会带来很多好处。为此,System.Object提供了虚方法GetHashCode,它能获取任意对象的Int32哈希值。
如果你重写了Equals方法,那么还应重写GetHashCode方法。因为在System.Collection.Hashtable类型、System.Collections.Generic.Dictionary类型以及其他一些集合实现中,要求两个对象为了相等,必须具有相同的哈希码,所以重写了Equals,那么还应该重写GetHashCode,确保相等性算法和对象哈希码算法是一致的。
System.ValueType实现的GetHashCode采用了反射机制(它的速度较慢),并对类型的实例字段执行的XOR运算。建议自己实现GetHashCode,这样才能确切的掌握它所做的事,而且你的实现会比ValueType的实现快一些。
在自己实现哈希表集合时,或调用GetHashCode,千万不要对哈希码进行持久化,因为哈希码很容易改变。
小结
System.Object提供了虚方法GetHashCode,它能获取任意对象的Int32哈希码。
另外重写了Equals方法,那么最好重写GetHashCode方法。
因为在System.Collections.Hashtable类型和System.Collections.Generic.Dictionary类型以及其它的一些集合的实现中,要求两个对象必须要有相同的Hash码才被视为相等。
所以重写Equals方法实现相等性后,最好也重写GetHashCode方法,以确保相等型算法和对象哈希码算法一致。
另外重写时可以调用基类的GetHashCode方法,但是不要调用Object或者ValueType的GetHashCode方法,因为两者的实现性能不高。
包含相同值的两个不同对象应返回相同的哈希码。(作者建议不要对哈希码进行持久化,因为哈希码的算法可能会改变)
5.5dynamic基元类型
为了方便开发人员使用反射或者与基本组件通信,C#编译器允许将一个表达式的类型标记为dynamic.还可将一个表达式的结果放在一个变量中,并将变量的类型标记为dynamic,然后,可以用这个dynamic表达式/变量调用一个成员,比如字段、属性/索引器、方法、委托等。
代码使用dynamic表达式/变量调用一个成员时,编译器会生成特殊的IL代码来描述所需要的操作。这种特殊的代码称为payload(有效载荷)。在运行时,payload代码根据当前有dynamic表达式/变量引用的对象的实际类型来决定具体执行的操作。
不要混淆dynamic和var。用var声明的局部变量只是一种简化语法,它要求编译器根据一个表达式推断具体的数据类型。var关键字只能用于声明方法内部的局部变量,而dynamic关键字可用于局部变量,字段和参数。表达式不能转型为var,但可以转型为dynamic。必须实现初始化化var声明的变量,但无需初始化用dynamic声明的变量。
dynamic表达式其实与System.Object一样的类型。编译器假定你在表达式上进行任何操作都是合法的,所以不会生成任何警告和错误。但是试图在运行时执行无效操作,就会抛出异常。
不能定义对dynamic进行扩展的扩展方法,但可以定义对Object进行扩展的扩展方法。
不能将Lambda表达式或者匿名方法作为实参传给dynamic方法调用,因为编译器不能推断出要使用的类型。
C#内建的动态求值功能所产生的额外开销是不容忽视的。虽然能用动态功能简化语法,但也要看是否值得。
小结
dynamic基元类型是为了方便开发人员使用反射或者与其它非.net组件通信.
代码使用dynamic表达式/变量时,编译器生成特殊的IL代码来描述这种操作。这种特殊的代码被称为payload(有效载荷)。在运行时,payload根据dynamic表达式/变量引用的对象的实际类型来决定具体执行的操作。
dynamic类型在编译后实际上是作为System.object,然而它在元数据中被应用了System.Runtime.CompilerServices.DynamicAttribute的实例。局部变量除外,因为Attribute显然不能在方法内部使用。
另外使用的泛型的dynamic的代码时,泛型代码已经变异好了,将类型视为Object,编译器不在泛型代码中生成payload,所以也不会执行动态调度。
且编译器允许使用隐式转型语法,将表达式从dynamic转型为其它类型。
dynamic a=123;
Int32 b=a;
另外dynamic表达式的求值结果也是一个dynamic类型。
不能定义对dynamic进行扩展的扩展方法,不能将lambda表达式或匿名方法作为实参传给dynamic使用。
为COM对象生成可由“运行时”调用的包装时。Com组件的方法中使用任何Variant实际都转化为dynamic,这称为动态化。显著简化了与COM对象的操作。
当然用dynamic会有额外的性能开销,因为会引用一些必须的dll,然后执行一些动态绑定啊什么的。如果只是一两处用这个东西,还是用传统方法好一点。(一般会引用Microsoft.CSharp.dll,与com组件操作还会用到System.Dynamic.dll)
dynamic和var的区别是什么?
dynamic是在运行时检测实际类型,var是在编译时编译器已经能够确定实际类型。例如定义了一个var str = “abc”; 这完全等同于定义了string str = “abc”; 编译器可以判断出str只能是string类型,用str调用string类型的方法和属性时,智能提示可以显示所有string类型的方法和属性,但当定义dynamic str = “abc”; 时,编译器并不知道str的实际类型,只会在运行时做判断,即使我们用str调用一个根本不存在的方法,同样可以通过变异,但运行时会报错。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Spring刷题笔记 面试题 如何用基于Java配置的方式配置Spring?
Spring对Java配置的支持是由Configuration注解和Bean注解来实现的。 由Bean注解的方法将会实例化、配置和初始化一个新对象,这个对象将由Spring的IOC容器来管理。 Bean声明所起到的作用与<bean/> 元素类似。 被Configuration所注解的类则表示这个类的主要目…...
2024/4/14 13:10:21 - 技术团队的建设思路
按建设周期区分: 速成型 注重业务理解能力,适用于业务型项目,需要迅速理解业务痛点,项目中免不了要增加 “填坑式开发” 的比重,将问题留待后来人去解决,短期业务需求成效快,相对来说不利于于…...
2024/4/30 16:36:51 - C++ 引用
温馨提示:本笔记配合视频食用更佳 https://www.bilibili.com/video/BV1et411b73Z?p89https://www.bilibili.com/video/BV1et411b73Z?p89 引用 1.引用的基本使用 作用:给变量取别名 语法:数据类型 & 别名 原名 对数组的引用&#…...
2024/4/14 13:11:26 - minikube的使用
minikube的使用 因为minikube创建k8s虚机是通过virtualbox来做的,我们还是需要单独安装vritualbox才可以,virtualbox就不是我们这篇文章的重点啦,我们放到其他的文章中进行描述。 minikube的一些常用命令 创建一个单节点的k8s集群 miniku…...
2024/4/21 3:14:14 - Jetson 基本笔录
Roadmap Jetson Roadmap | NVIDIA Developer 商业硬件路线图, 2022年有64GB RAM的Xavier, 16GB RAM的Xavier NX, 32GB RAM的Orin, 12GB RAM的Orin NX. 工业硬件路线图 Jetpack软件路线图, 2022第一季度会发布Jetpack 5.0(Linux内核5.10, 发行版Ubuntu20.04)开发者预览版, 而R…...
2024/4/30 19:29:43 - 将HIDL服务添加到系统镜像(七)
1.添加自定义makefile文件到产品 前面几章介绍的方法一般用于开发阶段,在功能开发完成后,则需要集成到系统镜像中去。我们使用的产品则是aosp_x86_64 TARGET_PRODUCTaosp_x86_64所以需要将自定义的makefile文件添加到产品的配置makefile中去,…...
2024/4/19 11:33:47 - 15. Examples【示例】
原文链接:https://datatracker.ietf.org/doc/html/rfc8445#section-15 15. Examples【示例】 This section shows two ICE examples: one using IPv4 addresses and one using IPv6 addresses. 本节展示了两个 ICE 示例:一个使用 IPv4 地址,…...
2024/4/14 13:11:41 - 单元测试界的高富帅,Pytest框架,手把手教学,高阶用法实战(二)
前 言 上一篇文章入门篇咱们介绍了pytest的基本使用,这一篇文章专门给大家讲解pytest中关于用例执行的前后置步骤处理,pytest中用例执行的前后置处理既可以通过测试夹具(fixtrue)来实现,也可以通过xunit 风格的前后置方法来实现。接下来我们一起看看如何…...
2024/4/18 13:33:23 - C语言-“函数注册与回调模型”的动态库:实现模块间的交互(低耦合)
背景:编写一个模块的动态库,提供了必要的头文件和demo。 思考:首先弄清楚,要编写的库对外及提供几个接口。读懂相关头文件的结构体和自己写的库要用的函数。 在实际项目开发当中,有很多的库文件,尤其是在…...
2024/4/30 17:16:04 - 【Effective Objective-C】——对象、消息、运行期
文章目录概述理解“属性”这一概念属性特质atomic和nonatomic的区别?尽量将所有属性都声明为nonatomic要点在对象内部尽量直接访问实例变量理解:“对象等同性”这一概念特定类所具有的等同判定方法等同性判定的执行深度容器中可变类的等同性以“类族模式…...
2024/4/14 13:11:51 - day13-学习笔记
day.13笔记 一.Arrays数组的工具类 1.概念:此类是用来操作数组的各种方法方法的名称方法的描述public static void sort(int[] a)对指定的 int 型数组按数字升序进行排序。该排序算法是一个经过调优的快速排序法public static String toString(int[] a)返回指定数…...
2024/4/22 22:54:58 - 正则,flutter人脸认证
\D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] POSIX 字符类(仅 US-ASCII) \p{Lower} 小写字母字符:[a…...
2024/4/14 13:11:31 - Node中的模块系统
使用Node编写应用程序主要就是在使用: EcmaScript语言和浏览器一样,在Node中没有Bom和Dom核心模块文件操作的fshttp服务操作的httpurl路径操作模块path路径处理模块os操作系统信息第三方模块art-template必须通过npm来下载才可以使用自己写的模块自己创…...
2024/4/30 16:29:26 - 阿里P8财富自由,薪资200W+?看完我慕了呀。
阿里目前校招生的级别均在P5,由此可见P4这个职级已经消失了。主力员工是P6-P8。 对于阿里来有一些业务趋近于边缘化,这类职级为P8的在总部也只是为P7职级。 一、阿里P8一年赚多少钱 阿里目前的薪资分成:薪资期权。工作三年以内一般就是工资…...
2024/4/14 13:11:21 - 牛客真题编程——day1
环境:c 1、连续最大和 一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3 首先使用穷举法,嵌套循环遍历出最大和,但是时间复杂度为n2ÿ…...
2024/4/30 17:56:25 - LinkedList,set和排序总结
1.Linkedlist 1.1概述 Linkedlist:底层是双向链表,因为不是连续存储,只是能找到下一个元素的地址,所以进行添加删除操作效率较高。但查询效率较低,因为只能从第一个挨个找。 1.2基本使用 public static void main(String[] ar…...
2024/4/30 17:52:52 - VSCode 离线安装中文语言包
1.插件市场 Extensions for Visual Studio family of products | Visual Studio Marketplace 输入: language 下载地址: https://ms-ceintl.gallery.vsassets.io/_apis/public/gallery/publisher/MS-CEINTL/extension/vscode-language-pac…...
2024/4/30 20:29:10 - 计算机机器视觉原理之分类器2
计算机视觉一.对于损失函数二.正则项与超参数三.优化算法参数优化梯度下降算法梯度计算:随机梯度下降算法小批量梯度下降算法四.数据集划分K折交叉验证五.数据预处理一.对于损失函数 损失函数: 单样本的多累支撑向量机损失: 线性分类器&am…...
2024/4/29 13:02:00 - 【Android春招每日一练】(六) 剑指4题+Java并发
文章目录概览剑指offer1.21 链表中倒数第k个节点1.22 反转链表1.23 合并两个排序链表1.24 树的子结构Java并发2.18 并发编程2.18 悲观锁与乐观锁2.19 AQS2.20 BlockingQueue2.21 ConcurrentHashMap总结概览 剑指offer:链表中倒数第k个节点、反转链表、合并两个排序…...
2024/4/14 13:11:26 - OSPF概述
...
2024/4/14 13:11:26
最新文章
- 访问 www.xxx.com 的请求遭到拒绝您未获授权
清除dns缓存:ipconfig /flushdns 清除cookie 关闭浏览器,重新进入...
2024/4/30 21:35:17 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 解决npm install安装node-sass包容易失败的问题
具体问题如下: npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: XXX3.4.0 npm ERR! Found: webpack5.31.2 npm ERR! node_modules/webpack npm ERR! peer webpack”^4.0.0 || ^5.0.0″ from html-…...
2024/4/30 4:06:28 - Python(乱学)
字典在转化为其他类型时,会出现是否舍弃value的操作,只有在转化为字符串的时候才不会舍弃value 注释的快捷键是ctrl/ 字符串无法与整数,浮点数,等用加号完成拼接 5不入??? 还有一种格式化的方法…...
2024/4/29 11:51:50 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/29 23:16:47 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/30 18:14:14 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/30 18:21:48 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/30 9:43:22 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57