1.程序集加载机制 
2.如何生成强签名程序集,把程序集放入到GAC中有什么好处,编译时如何制定版本.延迟签名有什么作用 
3.string 和byte[]对象如何进行转换 
4.如何自定义序列化和反序列化 
5..NET提供哪些类型实现反射 
6.c#多线程编程如何解决资源冲突问题, 解决中注意什么 
7.vs2005中非创建控件的线程能不能直接调控件,不能如何处理 
8.什么是套接字 9.编码题: 自己编码实现泛型集合,要求实现foreach功能,及添加,删除,等. 

解决方案 »

  1.   

    都是概念啊。
    你找一本C#书都有了。
    关于编码题:foreach 实现,就继承ienumrable 或者ienumrator 就可以。
      

  2.   

    第一题:
       1、隐式加载
            没有被显式加载但被引用的程序集,CLR会按照全局程序集缓存(GAC)、工作目录(应用程序所在目录)以及私有路径目录的顺序来寻找并加载。
    2、AppDomain.Load 方法
        将一个程序集加载到一个特定的程序域中,主要用来供非托管代码调用。
    3、Assembly.Load方法
        通过接受一个程序集标识来加载程序集。如果是强命名程序集,则标识包括程序集名称、版本、语言文化、以及公有密钥标记,Load方法将导致CLR按照隐式加载的策略寻找并加载程序集。弱命名程序集则只是一个不带文件扩展名的程序集的名称,CLR不会到GAC中查找,如果没有指定私有目录,则在工作目录查找,如Assembly.Load("Math")。其中私有目录的定义可以在配置文件中指定。
    第二题:1.生成密钥
    2.使用密钥
    把密钥文件放到解决方案的根目录下,打开解决方案,修改要强命名项目的AssemblyInfo.cs文件
    [assembly: AssemblyVersion("1.0.0.1")]     //强命名程序集一般都指定版本号
    [assembly: AssemblyDelaySign(false)]     //是否要延迟签名 false:不延迟签名 true:延迟签名
    [assembly: AssemblyKeyFile("mykey.key")]    //密钥文件的路径
    3.生成强名称程序集
    4.部署强命名程序集到GAC中
    GAC作用:作用是可以存放一些有很多程序都要用到的公共Assembly,例如System.Data、System.Windows.Forms等等。这样,很多程序就可以从GAC里面取得Assembly,而不需要再把所有要用到的Assembly都拷贝到应用程序的执行目录下面。
      

  3.   

    第九题:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace Lesn003_GenericTypeApp
    {
        public class MyList<T>:IEnumerable<T>
        {
            private readonly List<T> mylist = new List<T>();
            public MyList()
            {
                mylist = new List<T>();
            }
            public MyList(IEnumerable<T> coll)
            {
                mylist = new List<T>(coll);
            }      
            public int Count
            {
                get
                {
                    return mylist.Count;
                }
            }
            public T this[int index]
            {
                get
                {
                    if (index >= 0 && mylist.Count > index)
                        return mylist[index];
                    return default(T);
                }
                set
                {
                    mylist[index] = value;
                }
            }
            
            public void Add(T item)
            {
                mylist.Add(item);
            }
            public bool  Remove(T item)
            {
               return  mylist.Remove(item);
            }
            public void RemoveAt(int index)
            {
                mylist.RemoveAt(index);
            }
            public MyList<T> GetRange(int start, int count)
            {
                return new MyList<T>(mylist.GetRange(start, count));
            }
            public T Find(Predicate<T> math)
            {
                return mylist.Find(math);
            }
            public MyList<T> FindAll(Predicate<T> math)
            {
                return new MyList<T>(mylist.FindAll(math));
            }
            public void Insert(int index, T item)
            {
                mylist.Insert(index, item);
            }
            public T[] ToArray()
            {
                return mylist.ToArray();
            }
            public List<T> ToList()
            {
                return mylist;
            }
            #region IEnumerable<T> 成员        public IEnumerator<T> GetEnumerator()
            {
                foreach (T item in mylist)
                    yield return item;
            }        #endregion        #region IEnumerable 成员        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
            {
               return  GetEnumerator();
            }        #endregion
        }
    }
      

  4.   

    第三题:
                string str = "1123";
                byte[] bytes = new byte[str.Length];
                char[] chares = str.ToCharArray();
                char c = new char();
                for (int i = 0; i < str.Length; i++)
                {
                    c = chares[i];
                    byte b = new byte();
                    Byte.TryParse(c.ToString(), out b);
                    bytes[i] = b;
                }
      

  5.   

    1.程序集加载机制 (解释得比较粗,这题要细可以很细,再往下走就是元数据等知识点的描述了)
    程序集加载可分为隐式加载与显示加载两种;
      回答:当CLR在运行过程中需要加载某一个程序集时,它会首先检查程序集全局缓存即GAC中是否存在需要加载的程序集,如果有则加载此程序集,若没有可以在当前私有目录中继续查找,有则加载,反之如果当前配置了程序集配置文件则继续在当前私有目录中的程序集配置文件中所指定的目录中去查找此程序集,若存在则加载;若都没有,则报错了;
    2.如何生成强签名程序集,把程序集放入到GAC中有什么好处,编译时如何制定版本.延迟签名有什么作用 
        回答:
      (1)、可以使用在.net命令行环境使用sn -k [文件名.snk] 命令生成强命名密钥;然后在集成开发环境中的签名中引用生成的强命名文件即可生成强命名程序集;当然也可以使用编译器或程序集链接器来生成强命名程序集;
      (2)、好处在于,大家可以共享使用、版本管理能力更强;
      (3)、可以在集成环境使用程序集生成时自带的AssemblyInfo.cs文件中设置,也可以使用命令行al来生成;
      (4)、延迟签名可以更好的保护程序集的安全;
    3.string 和byte[]对象如何进行转换
       回答:最简单的方法使用System.Text命名空间下的Encoding类进行转换,它里面提供了GetString、GetBytes 两个简单的的方法可以将string 和byte[]互相转化;
    4.如何自定义序列化和反序列化 
       回答:实现System.Runtime.Serialization命名空间下的IFormatter接口即可自定义序列化和反序列化;
    5..NET提供哪些类型实现反射 
          回答:GetType类、Assembly类等
    6.c#多线程编程如何解决资源冲突问题, 解决中注意什么 
          回答:加入同步控制;解决中要注意不要造成死锁;
    7.vs2005中非创建控件的线程能不能直接调控件,不能如何处理 
       回答:不能;可以使用System.ComponentModel命名空间下提供的BackGroundWorker类,它可以帮助解决UI操作问题;
    8.什么是套接字 
          回答:套接字就是TCP/IP协议提供给外部用户用于网络编程的编程接口,即网络编程API;
    9.编码题: 自己编码实现泛型集合,要求实现foreach功能,及添加,删除,等. 
       回答:这个得自己去写了;简单实现的方法需使用List<T>类,foreach功能需要实现Ienumrable 接口;
      

  6.   

    4
    //序列化,保存一个对像,保存到文件里的对像是object类型的,在相应的类前面加特性[Serializable]
    //导包using System.Runtime.Serialization.Formatters.Binary
                FileStream fs = File.Create("name.bin");
                BinaryFormatter bf = new BinaryFormatter(fs);
                bf.Serialize(fs ,"要存储的对像");
                fs.Close();
    //反序列化,
                FileStream fs = new FileStream("name.bin",FileMode.Open);
    BinaryFormatter bf = new BinaryFormatter(fs);
           Object obj = bf.Deserialize(fs);
                fs.Close();
      

  7.   

    9.编码题: 自己编码实现泛型集合,要求实现foreach功能,及添加,删除,等. 
    求这题的答案啊...
      

  8.   

    访问其他线程创建的控件
    if (control.invokerequired)
    control.invoke(delegate method, params object[] args);