您的位置:首页 > 编程语言 > C#

C#学习随笔

2016-07-07 16:18 501 查看
1、字符串变量不能赋值给字符变量。

2、Math函数输出尽量取舍,一般用ToString("f4"),否则显示误差。

3、针对短时间内大量random产生重复问题(http://www.cnblogs.com/rupeng/p/3723018.html)

可以使用c#.net中的RNGCryptoServiceProvider产生任意范围强随机数的办法

//这样产生0 ~ 100的强随机数(含100)
int max = 100;
int rnd = int.MinValue;
decimal _base = (decimal)long.MaxValue;
byte[] rndSeries = new byte[8];
System.Security.Cryptography.RNGCryptoServiceProvider rng
= new System.Security.Cryptography.RNGCryptoServiceProvider();
rng.GetBytes(rndSeries);
//不含100需去掉+1
rnd = (int)(Math.Abs(BitConverter.ToInt64(rndSeries, 0)) / _base * (max+1));

//这个rnd就是你要的随机数,
//但是要注意别扔到循环里去,实例化RNG对象可是很消耗资源的


4、代码快速格式化Ctrl+K+D

5、全部通过代码新建窗体

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Charpter3_6
{
public partial class Form1 : Form
{
int PicNum = 1;
public Form1()
{
InitializeComponent();
this.StartPosition = FormStartPosition.CenterScreen;
}

private void Form1_Load(object sender, EventArgs e)
{
PictureBox pic = new PictureBox();
pic.Width = 400;
pic.Height = 300;
pic.Top = 3;
pic.Left = 5;
pic.SizeMode = PictureBoxSizeMode.StretchImage;
pic.ImageLocation = "1.jpg";
pic.Name = "Pic1";
Controls.Add(pic);

Button btn1 = new Button();
btn1.Text = "上一张";
btn1.Name = "b1";
btn1.Enabled = false;
btn1.Click += new EventHandler(btn_Click);

Button btn2 = new Button();
btn2.Text = "下一张";
btn2.Name = "b2";
btn2.Enabled = true;
btn2.Click += new EventHandler(btn_Click);

btn1.Top = btn2.Top = pic.Height + 10;
btn1.Left = (this.Width - btn1.Width - btn2.Width - 20) / 2;
btn2.Left = btn1.Left + btn1.Width + 20;

Controls.Add(btn1);
Controls.Add(btn2);
}

private void btn_Click(object sender,EventArgs e)
{
Button b = (Button)sender;
if(b.Text=="上一张")
{
PicNum = PicNum - 1;
}
else
{
PicNum = PicNum + 1;
}
PictureBox p = (PictureBox)Controls.Find("Pic1", true)[0];
p.ImageLocation = PicNum + ".jpg";
this.Text = "这是第" + PicNum.ToString() + "张图片";

Button b1 = (Button)Controls.Find("b1", true)[0];
Button b2 = (Button)Controls.Find("b2", true)[0];

switch(PicNum)
{
case 1:
b1.Enabled = false;
b2.Enabled = true;
break;
case 4:
b1.Enabled = true;
b2.Enabled = false;
break;
default:
b1.Enabled = true;
b2.Enabled = true;
break;
}
}
}
}


6、关于C#静态构造函数的几点说明

  静态构造函数是C#的一个新特性,其实好像很少用到。不过当我们想初始化一些静态变量的时候就需要用到它了。这个构造函数是属于类的,而不是属于哪里实例的,就是说这个构造函数只会被执行一次。也就是在创建第一个实例或引用任何静态成员之前,由.NET自动调用。

class SimpleClass
{
// Static constructor
static SimpleClass()
{
//
}
}


  在使用静态构造函数的时候应该注意几点:

  (1)、静态构造函数既没有访问修饰符,也没有参数。因为是.NET调用的,所以像public和private等修饰符就没有意义了。
  
  (2)、是在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类,也就是说我们无法直接调用静态构造函数,也就无法控制什么时候执行静态构造函数了。

  (3)、一个类只能有一个静态构造函数。

  (4)、无参数的构造函数可以与静态构造函数共存。尽管参数列表相同,但一个属于类,一个属于实例,所以不会冲突。

  (5)、最多只运行一次。

  (6)、静态构造函数不可以被继承。

  (7)、如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
7、调用带参数的基类构造函数时,应使用base关键字。
  C# 参考之方法参数关键字:params、ref及out(http://www.cnblogs.com/hunts/archive/2007/01/13/619620.html)
8、(1)、结构与数组:结构可以有不同数据类型的成员组成;结构的各成员还可以定义各自的访问权限。
(2)、集合与数组:在数据个数确定的情况下,可以采用数组来存储处理数据。但数据的个数不能确定的是,可以采用集合,在程序运行时动态地改变存储长度、添加或删除元素(近似认为集合是动态数组)。
  (3)、数组的Clone与CopyTo:
1)CopyTo目标数组必须实例化,Clone不需;
2)CopyTo需要制定开始位置,Clone不需要。
(4)、数组Array类与ArrayList类;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: