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

解决方案 »

  1.   

    第一题: 
      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都拷贝到应用程序的执行目录下面。 
    第三题: 
                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; 
                }
    第五题:
       System.Type类
    第九题: 
    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 
        } 
      

  2.   

    生成强签名程序集后可以部署到GAC中,GAC指全局程序集缓存,是一个公共目录,该目录下的程序集可以被本机任意一个程序所引用。相反弱名称程序集则无法部署到此处
    注:不同版本的相同程序集还可以同时存在于GAC中
      

  3.   

    Assembly的Load方法和LoadFrom方法。LoadFrom可以加载指定路径名或者URL的程序集。
    通过嵌入公钥并使用私钥签名,可以生成强名称(strong name)的程序集。强名称程序集由4部分进行标识:名称、版本、区域性和公钥。
    强名称程序集可以部署到GAC中。GAC指全局程序集缓存,这是一个公共目录,放在此处的程序集可以被本机任意一个程序所引用
    不错