.Net基础加强05

垃圾回收(先了解以后再研究)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            ////FileStream fs;
            ////fs.Dispose(
            //Person p1;

            #region 弱引用

            //引用的意思就是:当一个对象没有变量引用的时候,这时就可以被垃圾回收了。
            //但是接下来如果要是再想用该对象的话也是不可能的,因为即便还没有垃圾回收,但是这个对象已经无法在引用到了(虽然堆内存中,但是找不到该对象了。)
            //这时,当一个对象没有任何变量引用时,我们可以使用一个WeakReference(弱引用)来保持对这个对象的“引用”,这时虽然对该对象“弱引用”了,
            //但是这个对象仍然是可以被垃圾回收的,如果在下次使用这个对象的时候,该对象还没有被垃圾回收,则可以通过弱引用直接找到该对象,然后继续使用,如果已经被垃圾回收了,则需要重新创建这个对象。

            //Person p = new Person();
            //p.Age = 25;
            //p.Name = "叶长种";
            //p.Email = "[email protected]";

            ////p.Email...
            ////Person tmp = p;
            ////p = null;

            ////GC.Collect();

            ////p = new Person();
            ////p.Name = "叶长种";
            ////p.Age = 25;
            ////p.Email = "[email protected]";

            #endregion

            #region 通过代码来实现弱引用

            Person p = new Person();
            p.Name = "叶长种";
            p.Age = 25;
            p.Email = "[email protected]";

            //弱引用
            WeakReference wkReference = new WeakReference(p);
            p = null;
            GC.Collect();

            //if (wkReference.Target != null)
            //{
            //    object o = wkReference.Target;
            //}

            //假设某个时间段的时候又要使用这个对象了。
            object o = wkReference.Target;

            if (o != null && wkReference.IsAlive)
            {
                Person p1 = o as Person;
                Console.WriteLine("{0}     {1}    {2}", p1.Name, p1.Age, p1.Email);
            }
            else
            {
                Console.WriteLine("重新创建对象吧,已经被垃圾回收了。");
            }

            Console.ReadKey();

            #endregion

        }
    }

    public class Person : IDisposable
    {
        public string Name
        {
            get;
            set;
        }
        public int Age
        {
            get;
            set;
        }
        public string Email
        {
            get;
            set;
        }

        public void Say()
        {

        }

        #region IDisposable 成员

        public void Dispose()
        {
            //编写代码,调用api,
        }
        #endregion

    }
}

集合

using System.Collections;(非泛型集合)

using System.Collections.Generic;(泛型集合)

“类似数组”集合:ArrayList,List<>

“键值对”集合(“哈希表”集合):Hashtable,Dictionary<K,V>

“堆栈”集合:Stack,Stack<T>(LIFO)

“队列”集合:Queue,Queue<T>(LIFO)

“可排序键值对”集合

Set集合

Dictionary集合

“双向链表”集合

 class Program
    {
        static void Main(string[] args)
        {
            #region ArrayList集合

            //ArrayList arrList = new ArrayList();
            //arrList.Add(10);
            //arrList.Add("10");
            //arrList.Add(new Person() { Name = "叶长种" });
            //arrList.Add(99.9);
            //arrList.Add(new int[] { 1, 2, 3, 4, 5 });
            //arrList.AddRange(new string[] { "叶长种", "詹姆斯", "科比" });

            ////arrList.RemoveAt(2);//删除索引为2的集合

            //for (int i = 0; i < arrList.Count; i++)
            //{
            //    arrList.RemoveAt(i);
            //}   //结果为 4 8

            ////arrList.Clear(); //清空集合

            //Console.WriteLine(arrList.Count);
            //Console.WriteLine(arrList.Capacity);
            //Console.ReadKey();

            //string str = "叶长种";
            //int n = 0;
            //try
            //{
            //    for (int i = 0; i < 30; i++)
            //    {
            //        n = i;
            //        str += str;
            //    }
            //}
            //catch
            //{
            //    Console.WriteLine(n);
            //    Console.WriteLine(str.Length);
            //}
            //Console.WriteLine(str);
            //Console.ReadKey();

            ////Array
            //int[] arr = new int[] { 1, 2, 3 };
            //Console.WriteLine(arr.GetType().ToString());
            //Console.WriteLine(arr.GetType().BaseType.ToString());
            //Console.WriteLine(arr.GetType().BaseType.BaseType.ToString());
            //Console.ReadKey();

            //ArrayList arrList = new ArrayList();

            #region MyRegion
            //arrList.Add(10);
            //arrList.Add("叶长种");
            //Person p1 = new Person();
            //p1.Name = "詹姆斯";

            //Person p2 = new Person();
            //p2.Name = "科比";

            //arrList.Add(p1);
            //arrList.Add(p2);

            //arrList.Remove(10);
            //arrList.Remove(p2);
            //Console.WriteLine(arrList.Count);
            //Console.WriteLine(arrList.Capacity);
            //Console.ReadKey();

            #endregion

            //Person p1 = new Person();
            //p1.Name = "yzk";
            //p1.Age = 18;
            //p1.Email = "[email protected]";

            //Person p2 = new Person();
            //p2.Name = "yzk";
            //p2.Age = 18;
            //p2.Email = "[email protected]";

            //string s1 = new string(new char[] { ‘a‘, ‘b‘, ‘c‘ });

            //arrList.Add(p1);
            //arrList.Add(p2);
            //arrList.Add(s1);

            //arrList.Remove(p2);
            //arrList.Remove("abc");//这样也会把s1删掉

            ////arrList.ToArray() //把集合变成数组

            //Console.WriteLine(arrList.Count);
            //Console.ReadKey();

            #endregion

            #region 集合中的Sort方法

            //ArrayList arrList = new ArrayList();
            #region
            ////arrList.Add(9);
            ////arrList.Add(19);
            ////arrList.Add(3);
            ////arrList.Add(7);
            ////arrList.Add(5);
            ////arrList.Sort();

            //arrList.Add("sk");
            //arrList.Add("jk");
            //arrList.Add("yzk");
            //arrList.Add("nll");
            //arrList.Add("yhb");
            //arrList.Add("ml");
            //arrList.Sort();//升序排序

            //for (int i = 0; i < arrList.Count; i++)
            //{
            //    Console.WriteLine(arrList[i]);
            //}
            //Console.ReadKey();

            #endregion

            ArrayList arrList = new ArrayList();

            Person sk = new Person() { Name = "sk", Age = 18, Email = "[email protected]" };
            Person jk = new Person() { Name = "jk", Age = 17, Email = "[email protected]" };
            Person yzk = new Person() { Name = "yzk", Age = 16, Email = "[email protected]" };
            Person yhb = new Person() { Name = "yhb", Age = 15, Email = "[email protected]" };
            arrList.Add(sk);
            arrList.Add(jk);
            arrList.Add(yzk);
            arrList.Add(yhb);

            //Sort()内部只支持升序,除非自己写CompareTo方法
            arrList.Sort();

            //[a,b,c,d]
            //a.CompareTo(b)

            //或者另外一个解决方案是,先升序排序再调用Reverse()反转数组。来实现降序的功能。
            //arrList.Reverse();

            for (int i = 0; i < arrList.Count; i++)
            {
                Person p = arrList[i] as Person;
                Console.WriteLine(p.Name);
            }

            Console.ReadKey();
            #endregion
        }
    }

    public class Person : IComparable
    {
        public string Name
        {
            get;
            set;
        }
        public int Age
        {
            get;
            set;
        }
        public string Email
        {
            get;
            set;
        }

        #region IComparable 成员

        public int CompareTo(object obj)
        {
            Person p = obj as Person;
            return this.Age - p.Age;
        }

        #endregion
    }

集合排序ICompare接口使用

  class Program
    {
        static void Main(string[] args)
        {
            ArrayList arrList = new ArrayList();
            Person sk = new Person() { Name = "skk", Age = 18, Email = "[email protected]" };
            Person jk = new Person() { Name = "jk", Age = 17, Email = "[email protected]" };
            Person yzk = new Person() { Name = "yzkk", Age = 16, Email = "[email protected]" };
            Person yhb = new Person() { Name = "yhbbbbbb", Age = 15, Email = "[email protected]" };
            arrList.Add(sk);
            arrList.Add(jk);
            arrList.Add(yzk);
            arrList.Add(yhb);
            //arrList.Sort(new SortByAgeAsc());
            arrList.Sort(new SortByNameAsc());

            for (int i = 0; i < arrList.Count; i++)
            {
                Console.WriteLine(((Person)arrList[i]).Name);
            }
            Console.ReadKey();

            //1.按照年龄降序排序

            //2.按照姓名升序排序

        }
    }

    public class SortByAgeAsc : IComparer
    {

        #region IComparer 成员

        public int Compare(object x, object y)
        {
            Person px = x as Person;
            Person py = y as Person;
            return px.Age - py.Age;

        }

        #endregion
    }

    public class SortByNameAsc : IComparer
    {

        #region IComparer 成员

        public int Compare(object x, object y)
        {
            Person px = x as Person;
            Person py = y as Person;
            return px.Name.Length - py.Name.Length;
        }

        #endregion
    }

    public class Person
    {
        public string Name
        {
            get;
            set;
        }
        public int Age
        {
            get;
            set;
        }
        public string Email
        {
            get;
            set;
        }
    }

.Net基础加强05

时间: 2024-11-09 00:56:40

.Net基础加强05的相关文章

python基础学习05(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #dict{键:值} #哈希 #注:字典是无顺序的,所以你懂的 #创建与赋值 dict1={} dict2={'name':'apply','avg':24,'sex':'man'} print dict1,dict2

java基础学习05(面向对象基础01--类实例分析)

面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过setter和getter设置和取得4.如果需要可以加入若干构造方法 5.再根据其它要求添加相应的方法6.类中的所有方法都不要直接输出,而是交给被调用处调用 Demo 定义并测试一个名为Student的类,包括属性有"学号"."姓名"以及3门课程"数学".

ios基础知识--05

1.UIView的tag属性 /* 1.所有直接或者间接继承UIVIew的控件都有一个tag属性 2.这个属性,只能用来保存一个数字,对控件的外观没有任何影响 3.但是我们可以通过这个属性的值,来判断是哪个控件 */ 2.transform属性 /* 1. 可以使用动画,叫做变换 2. CGAffineTransformIdentity 如果赋值,那么之前通过transform属性进行的修改都会复原:_imageButton.transform= CGAffineTransformIdentit

java基础学习05(面向对象基础02)

面向对象基础02 实现的目标 1.String类的使用 2.掌握this关键字的使用3.掌握static关键字的使用 String类 实例化String对象一个字符串就是一个String类的匿名对象,就是已经开辟了堆内存空间的并可以直接使用的对象.1.采用直接赋值的方式进行操作. String name = "zhangsan"; 使用这种方式,如果一个字符串已经被一个名称所引用,则以后再有相同的字符串声明时,就不会再开辟内存空间.2.直接调用String类的构造方法(public S

python入门基础教程05 Python工具常见错误

Python-Shell反馈常见错误 初学者通常会使用Python-Shell来学习Python基础及语法知识,在使用Python-Shell 时会遇到这样或者那样的错误,有的是语法错误,有的是键入的函数或者变量名字拼写错误,现就初学者常出现的错误做一个总结. 变量.函数未定义 下面我们简单总结一下在使用Python-Shell时常见的错误提示. >>>len = 12>>>le Traceback (most recent call last):   File &qu

.NET零基础入门05:委托与事件

一:前言 本小节,我们需要停一停我们的小游戏开发,虽然它现在还不完美,还很简单,甚至还有BUG.但是,为了更好的理解C#,现在到了该深入了解一些基础知识的时候了. 当然,实际上,本小节内容对于零基础入门的初学者来说,还是有点难了.委托与事件,如果只是泛泛的说一下,可能就是一两句话.但是,我们的课程要遵循一个原则:知其然,知其所以然.所以,本小节的内容实际上有点多,但是我希望大家细细品味,争取彻底消化委托和事件这两个概念. 同时,本课程还要教会大家使用一个工具,分析代码. 二:委托的现实场景:卖家

Power BI基础系列-05.可视化设计

可视化设计基本要求 在Power BI中,报表可以有一个或多个报表效果,所以页面统称为报表,报表的基本元素包含视觉对象(可视化效果).独立图像和文本框等等.从各个数据点到报表元素,再到报表页面本身,有多种格式选项可供选择. 报表生成工作在生成第一个视觉对象之前就开始了,因为优质的报表需要提前规划.了解需要处理那些数据.并记录要满足的报表需求:业务需求是什么?此类数据的使用方式是什么?用户数谁?用户希望能够根据此报表做出那些决策? 这些问题的答案决定了设计的方向,确保每张报表所传达的信息能够满足业

Java多线程系列---“基础篇”05之 线程等待与唤醒

转自:https://www.cnblogs.com/skywang12345/p/3479224.html  (含部分修改) 概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括: wait(), notify(), notifyAll()等方法介绍 wait()和notify() wait(long timeout)和notify() wait() 和 notifyAll() 为什么notify(), wait()等函数定义在Object中,而不是Thread中 一. wait(),

MySQL基础篇(05):逻辑架构图解和InnoDB存储引擎详解

本文源码:GitHub·点这里 || GitEE·点这里 一.MySQL逻辑架构 1.逻辑架构图 基于下面的逻辑架构图,可以大致熟悉MySQL各个架构组件之间的协同工作关系. 很经典的C/S架构风格,即客户端/服务端模式. 2.分层描述 客户端连接 通常会进行连接池管理,连接用户权限认证,安全管理等操作. 可以通过如下命令查看连接配置信息:SHOW VARIABLES LIKE '%connect%';可以看到最大连接和每个连接占用的内存等相关配置. 核心功能 第二层架构封装MySQL一系列核心