• 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类;
  • 相关阅读:
    【关键字】
    【选择结构语句:switch】
    【数据类型】
    【接口】
    【抽象类和接口的区别】
    【访问权限】
    【内部类】
    【方法】
    【this 关键字】
    【Static】
  • 原文地址:https://www.cnblogs.com/souliid/p/5395206.html
Copyright © 2020-2023  润新知