C#学习随笔

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类;
原文地址:https://www.cnblogs.com/souliid/p/5395206.html