C#.net中的const

转载:http://www.cnblogs.com/gaohao/archive/2012/07/25/2608182.html

C#.net中的const

const 关键字用于修改字段或局部变量的声明。它指定字段或局部变量的值是常数,不能被修改。例如: 
  const int x = 0; 
  public const double gravitationalConstant = 6.673e-11; 

  private const string productName = "Visual C#"; 
  备注 
  常数声明的类型指定声明引入的成员类型。常数表达式必须产生具有目标类型或者可隐式转换为目标类型的类型的值。 
  常数表达式是在编译时可被完全计算的表达式。因此,对于引用类型的常数,可能的值只能是 string 和 
null。 
  常数声明可以声明多个常数,例如: 
  public const double x = 1.0, y = 2.0, z = 3.0; 
  不允许在常数声明中使用 static 修饰符。 
  常数可以参与常数表达式,如下所示: 
  public const int c1 = 5; 
  public const int c2 = c1 + 100; 
  注意 

  readonly 关键字与 const 关键字不同。const 
字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 
字段可能具有不同的值。另外,const 字段是编译时常数,而 readonly 字段可用于运行时常数,如下面的代码行所示:public static 
readonly uint l1 = (uint)DateTime.Now.Ticks;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用C# .NET Framework写的微信扫码支付的WEB应用程序示例代码: ```csharp using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Xml; using System.Xml.Linq; using System.Security.Cryptography; using System.Text; using System.Net; using System.IO; namespace WeChatPayDemo.Controllers { public class HomeController : Controller { // 商户号 const string mch_id = "your-mch-id"; // 商户API密钥 const string api_key = "your-api-key"; // 应用ID const string appid = "your-appid"; // 通知地址 const string notify_url = "http://your-domain.com/notify"; // 支付请求地址 const string pay_url = "https://api.mch.weixin.qq.com/pay/unifiedorder"; // 首页 public ActionResult Index() { return View(); } // 支付页面 public ActionResult Pay(string total_fee) { // 生成订单号 string out_trade_no = DateTime.Now.ToString("yyyyMMddHHmmssfff") + new Random().Next(1000, 9999); // 构造支付请求参数 SortedDictionary<string, object> parameters = new SortedDictionary<string, object>(); parameters.Add("appid", appid); parameters.Add("mch_id", mch_id); parameters.Add("nonce_str", Guid.NewGuid().ToString().Replace("-", "")); parameters.Add("body", "微信扫码支付"); parameters.Add("out_trade_no", out_trade_no); parameters.Add("total_fee", int.Parse(float.Parse(total_fee) * 100 + "")); parameters.Add("spbill_create_ip", Request.UserHostAddress); parameters.Add("notify_url", notify_url); parameters.Add("trade_type", "NATIVE"); // 签名 string sign = Sign(parameters); parameters.Add("sign", sign); // 构造XML请求内容 string requestXml = BuildXml(parameters); // 发送支付请求 string responseXml = HttpPost(pay_url, requestXml); // 解析响应XML XDocument doc = XDocument.Parse(responseXml); string prepay_id = doc.Element("xml").Element("prepay_id").Value; string code_url = doc.Element("xml").Element("code_url").Value; // 构造二维码图片链接 string qr_code_url = $"https://api.qrserver.com/v1/create-qr-code/?size=150x150&data={HttpUtility.UrlEncode(code_url)}"; // 传递二维码图片链接和订单号到支付页面 ViewBag.QRCodeUrl = qr_code_url; ViewBag.OutTradeNo = out_trade_no; return View(); } // 支付结果通知接口 public ActionResult Notify() { // 接收POST数据 Stream stream = Request.InputStream; byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); string xml = Encoding.UTF8.GetString(bytes); // 解析XML数据 XDocument doc = XDocument.Parse(xml); string return_code = doc.Element("xml").Element("return_code").Value; string return_msg = doc.Element("xml").Element("return_msg").Value; string result_code = doc.Element("xml").Element("result_code").Value; string out_trade_no = doc.Element("xml").Element("out_trade_no").Value; string transaction_id = doc.Element("xml").Element("transaction_id").Value; // 验证签名 SortedDictionary<string, object> parameters = new SortedDictionary<string, object>(); parameters.Add("return_code", return_code); parameters.Add("return_msg", return_msg); parameters.Add("result_code", result_code); parameters.Add("out_trade_no", out_trade_no); parameters.Add("transaction_id", transaction_id); string sign = Sign(parameters); string sign_received = doc.Element("xml").Element("sign").Value; if (sign == sign_received) { // 处理支付结果 // ... // 返回通知结果 return Content(BuildXml(new Dictionary<string, object> { { "return_code", "SUCCESS" }, { "return_msg", "OK" } })); } else { // 签名验证失败 // ... // 返回错误信息 return Content(BuildXml(new Dictionary<string, object> { { "return_code", "FAIL" }, { "return_msg", "签名验证失败" } })); } } // 签名算法 private string Sign(IDictionary<string, object> parameters) { string stringA = string.Join("&", parameters.Where(p => !string.IsNullOrEmpty(p.Value.ToString())).OrderBy(p => p.Key).Select(p => $"{p.Key}={p.Value}")); string stringSignTemp = $"{stringA}&key={api_key}"; string sign = MD5(stringSignTemp).ToUpper(); return sign; } // MD5算法 private string MD5(string input) { MD5 md5 = MD5.Create(); byte[] buffer = Encoding.UTF8.GetBytes(input); byte[] hash = md5.ComputeHash(buffer); StringBuilder sb = new StringBuilder(); for (int i = 0; i < hash.Length; i++) { sb.Append(hash[i].ToString("x2")); } return sb.ToString(); } // 构造XML请求内容 private string BuildXml(IDictionary<string, object> parameters) { StringBuilder sb = new StringBuilder(); sb.Append("<xml>"); foreach (var kv in parameters) { sb.Append($"<{kv.Key}>{kv.Value}</{kv.Key}>"); } sb.Append("</xml>"); return sb.ToString(); } // 发送HTTP POST请求 private string HttpPost(string url, string data) { byte[] bytes = Encoding.UTF8.GetBytes(data); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = bytes.Length; using (Stream stream = request.GetRequestStream()) { stream.Write(bytes, 0, bytes.Length); } using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { using (Stream stream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(stream)) { return reader.ReadToEnd(); } } } } } } ``` 以上代码仅供参考,实际开发需要根据实际情况进行相应的修改和完善。同时,也需要遵循相关的安全规范和隐私保护措施,确保用户信息和支付安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值