c# Using语句三用途

using的用途 在C# 中 using的用途主要有三个 (1)第一个是 引用命名空间// 这个可以说是最常用的 (2)第二个是 为命名空间或类型创建别名。这称为“using 别名指令”。 (3)第三个是 当使用 IDisposable 对象时,应在 using 语句中声明和实例化此对象。using 语句按照正确 的方式调用对象上的 Dispose 方法,并(在您按照前面所示方式使用它时)会导致在调 用 Dispose 时对象自身离开作用域。在 using 块中,对象是只读的并且无法修改或重新赋 值。 using 语句确保即 阅读详情

using语句适用于那些需要及时释放资源的代码,其一般形式为:

using (type obj=initialization)      //也可以包含多个obj的初始化或new,中间用逗号分隔即可。

{

        //具体的处理代码

}

其实using语句本质上是对try语句的封装,等价于:

{

      type obj=initialization;

      try

      {

            //具体处理代码

      }

      finally

      {

            if (obj!=null)

            {

                  ((IDisposable)obj).Dispose();   //调用对象的Dispose()方法,销魂对象。

            }

      }

}

从上面的等价关系可以看出,using语句适用于任何包含Dispose()方法且需要及时销毁的对象。另外常常看到一些对象的销毁用close()方法,其实close()方法和Dispose()方法的功能基本上是一样的,都是用来销毁对象(Close是为了那些不熟悉Dispose的开发者设计的。因为基本上所有的developer都知道Close是干吗的,特别是对于那些有C++背景的developer)。实际上,一般情况下,Close()方法就是通过调用Dispose()方法来实现的。要记住的是:using里面的object必须能被隐式的转变为IDisposable才行,所以只会调用Dispose。

下面举一个常用的例子,处理文件时,必须显示的关闭用close方法,如果发生异常就会丢失一些内存资源,所以常常将close方法放在try-catch块的finally中。如果用using块就会方便很多,代码也很简洁漂亮。

using (FileStream fileStream=File.OpenText(path))

{

      byte[ ] datas={100,101,102};

      fileStream.Write(datas,0,datas.Length);

}

还有一个例子是数据库连接的例子如下:

using (SqlConnection cn = new SqlConnection(SqlConnectionString)){……}  

在上面语句中当退出using语句时会及时自动的关闭流对象fileStream,非常方便,而不用显示的再去调用Close方法了,数据库连接的例子也一样。

 

 

其实c#中Using语句共有三种用途:分别是

(1)作为语句,用于定义一个范围,在此范围的末尾将释放对象 ,这个就是只上面讲的内容,以下就不赘述了。

(2)引用命名空间,这样就可以直接在程序中引用命名空间的类型而不必指定详细的命名空间。

比如大家最常用的:using System.Text;

(3)为命名空间或类型创建别名。

  当同一个cs引用了不同的命名空间,但这些命名控件都包括了一个相同名字的类型的时候,可以使用C# using关键字来创建别名,这样会使代码更简洁。注意:并不是说两个名字重复,给其中一个用了别名,另外一个就不需要用别名了,如果两个都要使用,则两个都需要用using来定义别名的。

  1. using System;  
  2. using aClass = NameSpace1.MyClass; //为MyClass类定义了一个别名 
  3. using bClass = NameSpace2.MyClass;  
  4. ……  
  5. //使用方式  
  6. aClass my1 = new aClass();  
  7. Console.WriteLine(my1);  
  8. bClass my2 = new bClass();  
  9. Console.WriteLine(my2); 


 

 

Mind+掌控板实战:5分钟搞定Easy IoT的MQTT通讯(附完整代码) 本文详细介绍了如何利用掌控板和Mind+图形化编程软件,快速实现基于Easy IoT平台的MQTT通讯。通过清晰的步骤讲解和完整的代码示例,指导用户完成从云端配置、Wi-Fi连接到MQTT消息发布与订阅的全过程,帮助初学者轻松构建物联网设备间的双向对话系统。 阅读详情

相关推荐

在trae CN中使用conda环境(已解决)

Trae CN 是字节跳动于 2025 年 3 月 3 日发布的国内首个 AI 原生集成开发环境(AI IDE)123。

zwzscnds的博客 6935

C# using语句使用流还需要显示调用Close方法吗?

查阅了.NET源码中的Stream类 发现其对于IDisposable接口的实现如下 public void Dispose() { /* These are correct, but we'd have to fix PipeStream & NetworkStream very carefully. Contract.Ensu

晴天小鱼 8200

第18届全国大学生智能汽车竞赛四轮车开源讲解【2.5】-- 图像处理实战:从二值化到边缘检测的工程优化

本文深入讲解了第18届全国大学生智能汽车竞赛四轮车开源项目中图像处理的核心实战技术。文章聚焦于二值化与边缘检测两大关键环节,详细对比了大津法与索贝尔算子的工程应用与优化策略,并分享了遮光、偏振片等物理抗干扰技巧,旨在帮助参赛者构建稳定高效的图像预处理流水线,为赛道识别奠定坚实基础。

weixin_29279047的博客 100

c 连接mysql自动断开_C#使用using语法自动关闭SQLConnection数据库连接

C#使用using语法自动关闭SQLConnection数据库连接在C++中,对象只要使用完毕,就会自动调用其析构函数。这对于设计基于资源的类的人员来说,是一个非常好的消息,因为如果用户忘记关闭资源,使用析构函数是非常理想的。只要对象使用完毕,就会调用C++析构函数。所以,如果出现了异常,但没有捕获,有析构函数的所有对象就会调用它们的析构函数。在C#和其他托管语言中,没有自动、决定性的析构方式...

weixin_39790504的博客 1553

Android逆向实战:通过smali/baksmali动态注入DEX逻辑

本文详细介绍了在无源码条件下对Android应用进行动态逻辑注入的实战方法。通过使用smali和baksmali工具对DEX文件进行反编译、修改与重打包,实现在目标方法中插入自定义代码(如日志打印),并分享了定位目标、处理寄存器、避免常见错误的实用技巧与避坑指南。

weixin_29008691的博客 363

OPTI Toolbox v2.28 安装与 3 个求解器补全:SCIP、SeDuMi、MOSEK 配置详解

本文详细介绍了OPTI Toolbox v2.28在MATLAB环境下的完整安装指南,包括SCIP、SeDuMi和MOSEK三个关键求解器的配置与优化技巧。通过分步指导和实战案例,帮助用户高效搭建强大的优化工具包,提升混合整数规划、二次约束二次规划等复杂问题的求解效率。

weixin_29039773的博客 350

C#中using的使用

语句可以在使用完字符流后自动关闭流并释放资源,避免资源泄漏。它的作用是在代码块执行完毕后,调用实现了。对象读取文件的每一行内容,然后在使用完毕后,方法,从而释放资源。语句会负责关闭流并释放资源。代码块中,我们可以使用。

blu_e__heart的博客 975

【Burp入门第三十一篇】Burp+SwitchyOmega实现本地localhost代理

在部分情况下(如本地靶场),当我们需要在Burp中查看、修改本地流量包的时候,按以下三个配置是不能得到本地流量包的。

等风来 3214

C# Using用法&&Dispose||Close不同

Using用法 1、引入命名空间; 2、命名空间类型声明,好处是当同一个cs引用了两个不同的命名空间,但两个命名空间都包括了一个相同名字的类型的时候,清晰明了 using aClass = NameSpace1.MyClass; using bclass=NameSpace2.MyClass; 3、定义一个范围,在范围结束时处理对象。比较好奇是这种用法 执行完后就垃圾资源回收了,执行了...

ai_feng123的博客 4637

Apache Kafka Connect任意文件读取漏洞(CVE-2025-27817)

由于Apache Kafka客户端未对用户输入进行严格验证和限制,未经身份验证的攻击者可通过构造恶意配置读取环境变量或磁盘任意内容,或向非预期位置发送请求,提升REST API的文件系统/环境/URL访问权限。(CVE-2025-27817)

iSee857的博客 2026

卷积神经网络中的自注意力机制(Self-Attention Mechanism)

卷积神经网络中的机制表现为操作,其实现过程与Seq2Seq模型的自注意力机制类似。标准的卷积层是一种局部滤波操作,其输出特征上的任意位置是由对应输入特征的一个邻域构造的,只能捕捉局部特征之间的关系。而自注意力机制通过计算任意两个位置之间的关系直接捕捉远程依赖,而不用局限于相邻点,相当于构造了一个的卷积核,从而可以捕捉更多信息。在卷积网络的自注意力机制中,首先构造输入特征x的键特征fx, 查询特征gx和值特征hx;

AI天才研究院 1499

C#中使用using关键字回收资源

在进行文件操作后要显式调用文件流的Close方法释放文件资源,在使用数据库连接时也要调用连接对象的Close方法释放数据库资源。如果忘记调用Close方法,有可能会导致程序执行异常,而且还会导制垃圾收集器多次回收对象,造成内存的浪费。

wenchm的博客 729

YOLO11改进-注意力-引入级联组注意力机制(Cascaded Group Attention, CGA)

输入特征拆分:输入特征进入 CGA 模块后,被均匀拆分为个部分,每个部分作为一个注意力头的输入,这样每个头关注输入特征的不同部分,实现特征的并行处理,同时为提高注意力多样性奠定基础。注意力头计算单元:每个注意力头包含三个线性投影层、、用于将输入特征映射到不同子空间,以及计算自注意力的单元。在计算过程中,通过注意力头之间的级联操作,前一个头的输出会累加到下一个头的输入上,实现特征的逐步细化。

qq_64693987的博客 2489

C# Using Statement + Using Keyword

Using Statement The using statement obtains one or more resources, executes a statement, and then disposes of the resource. A using statement is translated into three parts:acquisition, usage, and di...

weixin_33888907的博客 139

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C#中using语句的用法

using语句为实现了IDisposable的类型对象调用Dispose方法,using语句能够保证使用的对象的Dispose方法在using语句块结束时被调用,无论是否有异常被抛出。C#编译器在编译时自动为using语句加上try/finally块,所以using的本质和异常捕获语句一样,但是语法更为简洁。所有using使用的对象都应该在using语句开始后再初始化,以保证所有的对象都能够被Dispose。...

前沿技术分享,人工智能、大模型技术分享,日常问题记录 7404

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C#中的using关键字

前段时间开始接触在VS下用C#开发(其实是WPF,只是说到VS,往往会扯上C#,而且WPF框架的后台语言确实主要是C#),新建一个WPF应用程序后,在MainWindow.xaml.cs文件开头会有一堆using xxx的语句。 因为以前接触过C++,所以对using也不陌生,毕竟using namespace std这样的语句在C++中非常常见。所以很自然的,也很想当然的认为这边的用法和C++一样,就是引入命名空间,不必深究。不过,在最近学习EF Core的过程中,在上下文的使用时,看到了这样的语句,觉

三千幻想乡 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

C# using 详解

C# using 详解

鲤籽鲲的博客 4107

C# 中using的几个用途

参考文献 http://www.cnblogs.com/morningwang/archive/2008/03/12/1102952.html http://msdn.microsoft.com/zh-cn/library/sf0df423.aspx 在C# 中 using的用途主要有三个 第一个是 引用命名空间// 这个可以说是最常用的 using namespace; 第二个是...

weixin_30415801的博客 1045

C#中using语句

using 语句 提供可确保正确使用IDisposable对象的方便语法。 示例 下面的示例演示如何使用using语句。 C#复制 using (var font1 = new Font("Arial", 10.0f)) { byte charset = font1.GdiCharSet; } 备注 File和Font是访问非托...

Elen005的博客 1263

C# 资源管理‌(using 语句)

1‌、始终用 using 处理一次性对象‌:避免手动调用 Dispose()。1‌、对象必须实现 IDisposable‌:否则无法使用 using。2‌、优先使用 using 声明(C# 8.0+)‌:简化代码结构。2‌、静态引入‌(C# 6.0+):直接引用静态成员。1、别名引入‌:解决命名冲突。‌2. 数据库连接‌。

ByteGeek 2452

C# using 三种使用方式

C# using 三种使用方式 http://www.cnblogs.com/fashui/archive/2011/09/29/2195061.html 1.using指令。 using 命名空间名字。 例如: using System; 这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs...

cxu123321的博客 3299

C# using语句使用心得总结

C# using语句用于定义一个范围,在此范围的末尾将释放对象,这样的用法比较少见,常见于非托管资源。这些资源在使用后,就必须彻底释放。 学习过C#的人都知道,using是关键字。在MSDN里面一查C#参考(C# Reference),using关键字就会有两个主要用途: 1、作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。请参见[using 指令]。 2、作为C# usi

精彩人生 1041

C#基础:using语句的用法

一、using语句 using可以算是.NET中新的语法元素,它清楚地说明一个通常比较占用资源的对象何时开始使用和何时被手动释放。当using可以被使用时,建议尽量使用using语句。至今为止,使用using语句发现它带给程序员的只有优点,而没有任何弊端。 在.NET的环境中,托管的资源都将由.NET的垃圾回收机制来释放,而一些非托管的资源则需要程序员手动地将它们释放。.NET提供了主动和被动两种释放非托管资源的方式,即IDisposable接口的Dispose方法和类型自己的Finalize方法。任何

songjuntao8的专栏 1969

C# using语句

using语句 有些类型的非托管对象数量有限制或很耗费系统资源。在使用完它们后,尽可能快地释放它们是非常重要的。 这里的using语句不同于using指令。 例子: using System; //using指令,不是using语句 using System.IO; //using指令,不是using语句 namespace UsingStatement { class Program { static void Main() {

weixin_42934887的博客 816

c#中using的三种用法

1.using指令。using + 命名空间名字,这样可以在程序中直接用命令空间中的类型,而不必指定类型的详细命名空间,类似于Java的import,这个功能也是最常用的,几乎每个cs的程序都会用到。 例如:using System; 一般都会出现在*.cs中。 2.using别名。using + 别名 = 包括详细命名空间信息的具体的类型。 这种做法有个好处就是当同一个cs引用了两个不同的命名...

qq_23018459的博客 9724

using语句

 using 关键字有两个主要用途: 作为指令,用于为命名空间创建别名或导入其他命名空间中定义的类型。 作为语句,用于定义一个范围,在此范围的末尾将释放对象。 第一种用法地球人都知道,下面说说第二种用法using语句:定义一个范围,将在此范围之外释放一个或多个对象。语法 using (Font f

Rocky_cqu的专栏 1551
上一篇: C#实现插件框架--过程
下一篇: 理解顶点着色器和像素着色器
HNFXS985
博客等级 码龄14年 219粉丝 150原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值