.NET常用的扩展方法整理

简介: using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;

namespace IBO.XJMYQP.Utility
{
    public static class Extension
    {
        #region String Extension

        public static string[] Split(this string val, string code)
        {
            return Regex.Split(val, code);
        }

        public static bool IsNullOrEmpty(this string val)
        {
            return string.IsNullOrEmpty(val);
        }

        public static bool IsNotEmpty(this string val)
        {
            return !string.IsNullOrEmpty(val);
        }

        public static string ToString2(this object val)
        {
            if (val == null)
                return string.Empty;
            return val.ToString();
        }

        /// <summary>
        /// 将1900-01-01或 0001/1/1 转换为空字符串 
        /// </summary>
        /// <param name="val"></param>
        /// <returns></returns>
        public static string ToVaildDateTime(this object val)
        {
            if (val == null)
                return string.Empty;
            else if (val.ToString() == "0001/1/1 0:00:00")
                return string.Empty;
            else if (val.ToString() == "1900-01-01 00:00:00.000" || val.ToString() == "1900/1/1 0:00:00")
                return string.Empty;
            return val.ToString();
        }

        /// <summary>
        /// 将空值和NULL值转换为一个默认的时间1900-01-01
        /// </summary>
        /// <param name="val"></param>
        /// <returns></returns>
        public static string ToInVaildDateTime(this object val)
        {
            if (val == null)
                return "1900-01-01";
            else if (val.ToString2().IsNullOrEmpty())
                return "1900-01-01";
            return val.ToString();
        }

        /// <summary>
        /// 判断字符串是否是数字
        /// </summary>
        public static bool IsNumeral(this string val)
        {
            decimal i = 0;
            return decimal.TryParse(val, out i);
        }

        /// <summary>
        /// 清除空格,加入非空判断,空字符串调用也不会报错
        /// </summary>
        public static string TrimSpace(this string val)
        {
            if (val == null)
                return null;
            else
                return val.Trim();
        }

        public static bool Contains(this string val, string value, StringComparison comp)
        {
            return val.IndexOf(value, comp) >= 0;
        }

        public static DateTime? ToDateTime(this string val)
        {
            if (string.IsNullOrEmpty(val)) return null;
            DateTime dt;
            if (DateTime.TryParse(val, out dt))
            {
                return dt;
            }
            return null;
        }

        public static bool ToBoolean(this string val)
        {
            if (string.IsNullOrEmpty(val)) return false;
            return val == Boolean.TrueString;
        }

        public static int ToInt(this string val)
        {
            int intValue;
            if (int.TryParse(val, out intValue))
            {
                return intValue;
            }
            return 0;
        }

        public static long ToLong(this string val)
        {
            long intValue;
            if (long.TryParse(val, out intValue))
            {
                return intValue;
            }
            return 0;
        }

        public static decimal ToDecimal(this string val)
        {
            decimal intValue;
            if (decimal.TryParse(val, out intValue))
            {
                return intValue;
            }
            return 0;
        }

        public static double ToDouble(this string val)
        {
            double result;
            if (double.TryParse(val, out result))
            {
                return result;
            }
            return 0;
        }

        public static float ToFloat(this string val)
        {
            float result;
            if (float.TryParse(val, out result))
            {
                return result;
            }
            return 0;
        }

        /// <summary>
        /// 按照长度截取字符串
        /// </summary>
        /// <param name="val"></param>
        /// <param name="length"></param>
        /// <returns></returns>
        public static string Truncate(this string val, int length)
        {
            if (string.IsNullOrEmpty(val))
                return val;
            return (val.Length > length ? val.Substring(0, length - 1) : val);
        }

        /// <summary>
        /// 按照长度截取字符串
        /// </summary>
        /// <param name="val"></param>
        /// <param name="length"></param>
        /// <param name="coda">结尾符号</param>
        /// <returns></returns>
        public static string Truncate(this string val, int length, string coda)
        {
            if (string.IsNullOrEmpty(val))
                return val;
            return (val.Length > length ? val.Substring(0, length - 1) + coda : val);
        }

        public static int ParseDayOfWeek(this string val)
        {
            val = val.ToLower();
            switch (val)
            {
                case "monday":
                    return 1;
                case "tuesday":
                    return 2;
                case "wednesday":
                    return 3;
                case "thursday":
                    return 4;
                case "friday":
                    return 5;
                case "saturday":
                    return 6;
                case "sunday":
                    return 7;
                default:
                    return 0;
            }
        }

        /// <summary>
        /// 截取指定字节长度的字符串
        /// </summary>
        /// <param name="str">原字符串</param>
        /// <param name="len">截取字节长度</param>
        /// <returns></returns>
        public static string CutByteString(this string str, int len)
        {
            string result = string.Empty;// 最终返回的结果
            if (string.IsNullOrEmpty(str)) { return result; }
            int byteLen = System.Text.Encoding.Default.GetByteCount(str);// 单字节字符长度
            int charLen = str.Length;// 把字符平等对待时的字符串长度
            int byteCount = 0;// 记录读取进度
            int pos = 0;// 记录截取位置
            if (byteLen > len)
            {
                for (int i = 0; i < charLen; i++)
                {
                    if (Convert.ToInt32(str.ToCharArray()[i]) > 255)// 按中文字符计算加2
                    { byteCount += 2; }
                    else// 按英文字符计算加1
                    { byteCount += 1; }
                    if (byteCount > len)// 超出时只记下上一个有效位置
                    {
                        pos = i;
                        break;
                    }
                    else if (byteCount == len)// 记下当前位置
                    {
                        pos = i + 1;
                        break;
                    }
                }
                if (pos >= 0)
                { result = str.Substring(0, pos); }
            }
            else
            { result = str; }
            return result;
        }


        /// <summary>
        /// 截取指定字节长度的字符串
        /// </summary>
        /// <param name="str">原字符串</param>
        /// <param name="startIndex">起始位置</param>
        /// <param name="len">截取字节长度</param>
        /// <returns></returns>
        public static string CutByteString(this string str, int startIndex, int len)
        {
            string result = string.Empty;// 最终返回的结果
            if (string.IsNullOrEmpty(str)) { return result; }

            int byteLen = System.Text.Encoding.Default.GetByteCount(str);// 单字节字符长度
            int charLen = str.Length;// 把字符平等对待时的字符串长度

            if (startIndex == 0)
            { return CutByteString(str, len); }
            else if (startIndex >= byteLen)
            { return result; }
            else //startIndex < byteLen
            {
                int AllLen = startIndex + len;
                int byteCountStart = 0;// 记录读取进度
                int byteCountEnd = 0;// 记录读取进度
                int startpos = 0;// 记录截取位置                
                int endpos = 0;// 记录截取位置
                for (int i = 0; i < charLen; i++)
                {
                    if (Convert.ToInt32(str.ToCharArray()[i]) > 255)// 按中文字符计算加2
                    { byteCountStart += 2; }
                    else// 按英文字符计算加1
                    { byteCountStart += 1; }
                    if (byteCountStart > startIndex)// 超出时只记下上一个有效位置
                    {
                        startpos = i;
                        AllLen = startIndex + len - 1;
                        break;
                    }
                    else if (byteCountStart == startIndex)// 记下当前位置
                    {
                        startpos = i + 1;
                        break;
                    }
                }

                if (startIndex + len <= byteLen)//截取字符在总长以内
                {
                    for (int i = 0; i < charLen; i++)
                    {
                        if (Convert.ToInt32(str.ToCharArray()[i]) > 255)// 按中文字符计算加2
                        { byteCountEnd += 2; }
                        else// 按英文字符计算加1
                        { byteCountEnd += 1; }
                        if (byteCountEnd > AllLen)// 超出时只记下上一个有效位置
                        {
                            endpos = i;
                            break;
                        }
                        else if (byteCountEnd == AllLen)// 记下当前位置
                        {
                            endpos = i + 1;
                            break;
                        }
                    }
                    endpos = endpos - startpos;
                }
                else if (startIndex + len > byteLen)//截取字符超出总长
                {
                    endpos = charLen - startpos;
                }
                if (endpos >= 0)
                { result = str.Substring(startpos, endpos); }
            }
            return result;
        }


        #endregion

        #region Object Extension

        public static DateTime? ToDateTime(this object val)
        {
            if (val == null) return null;
            return val.ToString().ToDateTime();
        }

        public static DateTime ToDateTime2(this object val)
        {
            if (val == null) return DateTime.MinValue;
            var time = val.ToString().ToDateTime();
            return time.HasValue ? time.Value : DateTime.MinValue;
        }

        public static Guid ToGuid(this object val)
        {
            //=>3.5没有提供Guid.TryParse 方法。
            if (val == null) return Guid.Empty;
            Guid gd;
            try
            {
                gd = new Guid(val.ToString2());
                return gd;
            }
            catch
            {
                return Guid.Empty;
            }
        }

        public static bool ToBoolean(this object val)
        {
            if (val == null) return false;
            return val.ToString().ToBoolean();
        }

        public static int ToInt(this object val)
        {
            if (val == null) return 0;
            return val.ToString().ToInt();
        }

        public static long ToLong(this object val)
        {
            if (val == null) return 0;
            return val.ToString().ToLong();
        }


        public static int ToIndexInt(this object val)
        {
            if (val == null) return -1;
            return val.ToString().ToInt();
        }

        public static decimal ToDecimal(this object val)
        {
            if (val == null) return 0;
            return val.ToString().ToDecimal();
        }

        public static double ToDouble(this object val)
        {
            if (val == null) return 0;
            return val.ToString().ToDouble();
        }
        public static float ToFloat(this object val)
        {
            if (val == null) return 0;
            return val.ToString().ToFloat();
        }

        /// <summary> 
        /// 对象转换为Json 
        /// </summary> 
        /// <param name="jsonObject">对象</param> 
        /// <returns>Json字符串</returns> 
        public static string ToJson(this object jsonObject)
        {
            string jsonString = "{";
            PropertyInfo[] propertyInfo = jsonObject.GetType().GetProperties();
            for (int i = 0; i < propertyInfo.Length; i++)
            {
                object objectValue = propertyInfo[i].GetGetMethod().Invoke(jsonObject, null);
                string value = string.Empty;
                if (objectValue is DateTime || objectValue is Guid || objectValue is TimeSpan)
                {
                    value = "'" + objectValue.ToString() + "'";
                }
                else if (objectValue is string)
                {
                    value = "'" + ToJson(objectValue.ToString()) + "'";
                }
                else if (objectValue is IEnumerable)
                {
                    value = ToJson((IEnumerable)objectValue);
                }
                else
                {
                    value = ToJson(objectValue.ToString());
                }
                jsonString += "\"" + ToJson(propertyInfo[i].Name) + "\":" + value + ",";
            }
            jsonString.Remove(jsonString.Length - 1, jsonString.Length);
            return jsonString + "}";
        }

        #endregion

        #region Numeral Extension
        /// <summary>
        /// 是否在指定范围内
        /// </summary>
        /// <param name="start">起始数值</param>
        /// <param name="end">结束数值</param>
        public static bool Between(this decimal val, decimal start, decimal end)
        {
            return val >= start && val <= end;
        }
        /// <summary>
        /// 是否在指定范围内
        /// </summary>
        /// <param name="start">起始数值</param>
        /// <param name="end">结束数值</param>
        public static bool Between(this int val, int start, int end)
        {
            return val >= start && val <= end;
        }
        /// <summary>
        /// 是否在指定范围内
        /// </summary>
        /// <param name="start">起始数值</param>
        /// <param name="end">结束数值</param>
        public static bool Between(this float val, float start, float end)
        {
            return val >= start && val <= end;
        }
        /// <summary>
        /// 是否在指定范围内
        /// </summary>
        /// <param name="start">起始数值</param>
        /// <param name="end">结束数值</param>
        public static bool Between(this double val, double start, double end)
        {
            return val >= start && val <= end;
        }

        /// <summary>
        /// 是否在指定范围内
        /// </summary>
        /// <param name="start">起始数值</param>
        /// <param name="end">结束数值</param>
        public static bool Between(this decimal? val, decimal start, decimal end)
        {
            return val.HasValue ? (val >= start && val <= end) : false;
        }
        /// <summary>
        /// 是否在指定范围内
        /// </summary>
        /// <param name="start">起始数值</param>
        /// <param name="end">结束数值</param>
        public static bool Between(this int? val, int start, int end)
        {
            return val.HasValue ? (val >= start && val <= end) : false;
        }
        /// <summary>
        /// 是否在指定范围内
        /// </summary>
        /// <param name="start">起始数值</param>
        /// <param name="end">结束数值</param>
        public static bool Between(this float? val, float start, float end)
        {
            return val.HasValue ? (val >= start && val <= end) : false;
        }
        /// <summary>
        /// 是否在指定范围内
        /// </summary>
        /// <param name="start">起始数值</param>
        /// <param name="end">结束数值</param>
        public static bool Between(this double? val, double start, double end)
        {
            return val.HasValue ? (val >= start && val <= end) : false;
        }

        #endregion

        #region Data Extension
        /// <summary>
        /// 通用简单实体类型互转
        /// </summary>
        public static List<ResultType> ConvertToEntityList<ResultType>(this object list) where ResultType : new()
        {
            List<ResultType> ResultList = new List<ResultType>();
            if (list == null) return ResultList;
            Type fromObj = list.GetType();
            if (fromObj.Equals(typeof(DataTable)))
            {
                var dt = list as DataTable;
                ResultList = dt.Rows.Cast<DataRow>().Where(m => !(m.RowState == DataRowState.Deleted || m.RowState == DataRowState.Detached)).Select(m => m.ConvertToEntityByDataRow<ResultType>()).ToList();
            }
            else if (list is IEnumerable)
            {
                ResultList = ((IList)list).Cast<object>().Select(m => m.ConvertToEntity<ResultType>()).ToList();
            }
            return ResultList;
        }

        /// <summary>
        /// 通用简单实体类型互转
        /// </summary>
        public static ResultType ConvertToEntity<ResultType>(this object fromEntity) where ResultType : new()
        {
            ResultType t = new ResultType();
            Type fromObj = fromEntity.GetType();
            if (fromObj.Equals(typeof(DataRow)))
            {
                //DataRow类型
                DataRow dr = fromEntity as DataRow;
                t = dr.ConvertToEntityByDataRow<ResultType>();
            }
            else
            {
                Type type = typeof(ResultType);
                PropertyInfo[] properties = type.GetProperties();
                PropertyInfo[] fromProperties = fromObj.GetProperties();
                foreach (PropertyInfo pro in properties)
                {
                    foreach (var fromPro in fromProperties)
                    {
                        if (fromPro.Name.Equals(pro.Name, StringComparison.OrdinalIgnoreCase))
                        {
                            object value = fromPro.GetValue(fromEntity, null);
                            if (value != null && value != DBNull.Value)
                            {
                                if (fromPro.PropertyType.Name != pro.PropertyType.Name)
                                {
                                    if (pro.PropertyType.IsEnum)
                                    {
                                        pro.SetValue(t, Enum.Parse(pro.PropertyType, value.ToString()), null);
                                    }
                                    else
                                    {
                                        try
                                        {
                                            value = Convert.ChangeType
                                            (
                                                value,
                                                (Nullable.GetUnderlyingType(pro.PropertyType) ?? pro.PropertyType)
                                            );
                                            pro.SetValue(t, value, null);
                                        }
                                        catch { }
                                    }
                                }
                                else
                                {
                                    pro.SetValue(t, value, null);
                                }
                            }
                            else
                            {
                                pro.SetValue(t, null, null);
                            }
                            break;
                        }
                    }
                }
            }
            return t;
        }

        /// <summary>
        /// DataRow转换为实体类
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dr"></param>
        /// <returns></returns>
        public static T ConvertToEntityByDataRow<T>(this DataRow dr) where T : new()
        {
            Type type = typeof(T);
            PropertyInfo[] properties = type.GetProperties();
            T t = new T();
            if (dr == null) return t;
            var columns = dr.Table.Columns.Cast<DataColumn>();
            foreach (PropertyInfo pi in properties)
            {
                foreach (DataColumn column in dr.Table.Columns)
                {
                    if (pi.Name.Equals(column.ColumnName, StringComparison.OrdinalIgnoreCase))
                    {
                        object value = dr[column];
                        if (value != null && value != DBNull.Value)
                        {
                            if (value.GetType().Name != pi.PropertyType.Name)
                            {
                                if (pi.PropertyType.IsEnum)
                                {
                                    pi.SetValue(t, Enum.Parse(pi.PropertyType, value.ToString()), null);
                                }
                                else
                                {
                                    try
                                    {
                                        value = Convert.ChangeType
                                        (
                                            value,
                                            (Nullable.GetUnderlyingType(pi.PropertyType) ?? pi.PropertyType)
                                        );
                                        pi.SetValue(t, value, null);
                                    }
                                    catch { }
                                }
                            }
                            else
                            {
                                pi.SetValue(t, value, null);
                            }
                        }
                        else
                        {
                            pi.SetValue(t, null, null);
                        }
                        break;
                    }
                }
            }
            return t;
        }

        /// <summary>
        /// 转换为DataTable,如果是集合没有数据行时候会抛异常。
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public static DataTable ConvertToDataTable(this object list)
        {
            if (list == null) return null;
            DataTable dt = new DataTable();
            if (list is IEnumerable)
            {
                var li = (IList)list;
                //li[0]代表的是一个对象,list没有行时,会抛异常。
                PropertyInfo[] properties = li[0].GetType().GetProperties();
                dt.Columns.AddRange(properties.Where(m => !m.PropertyType.IsClass || !m.PropertyType.IsInterface).Select(m =>
                    new DataColumn(m.Name, Nullable.GetUnderlyingType(m.PropertyType) ?? m.PropertyType)).ToArray());
                foreach (var item in li)
                {
                    DataRow dr = dt.NewRow();
                    foreach (PropertyInfo pp in properties.Where(m => m.PropertyType.GetProperty("Item") == null)) //过滤含有索引器的属性
                    {
                        object value = pp.GetValue(item, null);
                        dr[pp.Name] = value == null ? DBNull.Value : value;
                    }
                    dt.Rows.Add(dr);
                }
            }
            else
            {
                PropertyInfo[] properties = list.GetType().GetProperties();
                properties = properties.Where(m => m.PropertyType.GetProperty("Item") == null).ToArray();//过滤含有索引器的属性
                dt.Columns.AddRange(properties.Select(m =>
                    new DataColumn(m.Name, Nullable.GetUnderlyingType(m.PropertyType) ?? m.PropertyType)).ToArray());
                DataRow dr = dt.NewRow();
                foreach (PropertyInfo pp in properties)
                {
                    object value = pp.GetValue(list, null);
                    dr[pp.Name] = value == null ? DBNull.Value : value;
                }
                dt.Rows.Add(dr);
            }
            return dt;
        }


        /// <summary>
        /// 转换为DataTable;如果list数据行为0,也不会抛异常,返回空行,是按照<T>进行转换。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list"></param>
        /// <returns></returns>
        public static DataTable ConvertToDataTable<T>(this object list) where T : new()
        {
            var dt = new DataTable();
            if (list is IEnumerable)
            {
                IEnumerable<T> collection = (IEnumerable<T>)list;
                var props = typeof(T).GetProperties();
                dt.Columns.AddRange(props.Select(p => new DataColumn(p.Name, p.PropertyType)).ToArray());
                if (collection.Count() > 0)
                {
                    for (int i = 0; i < collection.Count(); i++)
                    {
                        ArrayList tempList = new ArrayList();
                        foreach (PropertyInfo pi in props)
                        {
                            object obj = pi.GetValue(collection.ElementAt(i), null);
                            tempList.Add(obj);
                        }
                        object[] array = tempList.ToArray();
                        dt.LoadDataRow(array, true);
                    }
                }
            }
            return dt;
        }


        /// <summary>
        /// 实体类公共属性值复制
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="target"></param>
        public static void CopyTo(this object entity, object target)
        {
            if (target == null) return;
            if (entity.GetType() != target.GetType())
                return;
            PropertyInfo[] properties = target.GetType().GetProperties();
            foreach (PropertyInfo pro in properties)
            {
                if (pro.PropertyType.GetProperty("Item") != null)
                    continue;
                object value = pro.GetValue(entity, null);
                if (value != null)
                {
                    if (value is ICloneable)
                    {
                        pro.SetValue(target, (value as ICloneable).Clone(), null);
                    }
                    else
                    {
                        pro.SetValue(target, value.Copy(), null);
                    }
                }
                else
                {
                    pro.SetValue(target, null, null);
                }
            }
        }

        public static object Copy(this object obj)
        {
            if (obj == null) return null;
            Object targetDeepCopyObj;
            Type targetType = obj.GetType();
            if (targetType.IsValueType == true)
            {
                targetDeepCopyObj = obj;
            }
            else
            {
                targetDeepCopyObj = System.Activator.CreateInstance(targetType);   //创建引用对象   
                System.Reflection.MemberInfo[] memberCollection = obj.GetType().GetMembers();

                foreach (System.Reflection.MemberInfo member in memberCollection)
                {
                    if (member.GetType().GetProperty("Item") != null)
                        continue;
                    if (member.MemberType == System.Reflection.MemberTypes.Field)
                    {
                        System.Reflection.FieldInfo field = (System.Reflection.FieldInfo)member;
                        Object fieldValue = field.GetValue(obj);
                        if (fieldValue is ICloneable)
                        {
                            field.SetValue(targetDeepCopyObj, (fieldValue as ICloneable).Clone());
                        }
                        else
                        {
                            field.SetValue(targetDeepCopyObj, fieldValue.Copy());
                        }
                    }
                    else if (member.MemberType == System.Reflection.MemberTypes.Property)
                    {
                        System.Reflection.PropertyInfo myProperty = (System.Reflection.PropertyInfo)member;
                        MethodInfo info = myProperty.GetSetMethod(false);
                        if (info != null)
                        {
                            object propertyValue = myProperty.GetValue(obj, null);
                            if (propertyValue is ICloneable)
                            {
                                myProperty.SetValue(targetDeepCopyObj, (propertyValue as ICloneable).Clone(), null);
                            }
                            else
                            {
                                myProperty.SetValue(targetDeepCopyObj, propertyValue.Copy(), null);
                            }
                        }
                    }
                }
            }
            return targetDeepCopyObj;
        }

        #endregion

        public static T ChangeType<T>(this object obj, T t)
        {
            return (T)obj;
        }

        public static string ConverToHTML(this DataTable dt)
        {
            System.Text.StringBuilder sb = new StringBuilder();
            sb.AppendLine("<table style='font-size:12px;' border='1' cellspacing='0' cellpadding='3'>");
            sb.Append("  <tr>");
            foreach (DataColumn col in dt.Columns)
            {
                sb.Append(string.Format("<th>{0}</th>", col.ColumnName));
            }
            sb.AppendLine("  </tr>");
            foreach (DataRow dr in dt.Rows)
            {
                sb.Append("  <tr>");
                foreach (DataColumn col in dt.Columns)
                {
                    sb.Append(string.Format("<td>{0}</td>", dr[col].ToString()));
                }
                sb.AppendLine("  </tr>");
            }
            sb.AppendLine("</table>");
            return sb.ToString();
        }

    }
}

 

目录
相关文章
《你必须知道的.net》读书笔记 005——1.5 玩转接口
     接口,理解这个东东用了好长的时间,从 2004年开始,写分页控件的时候需要实现一个接口,在网上找了一个例子,照猫画虎般的弄出来了,居然能用,但是完全没有理解何为接口。有好几年的时间过去了,直到最近才算是真正的理解了一点接口。
955 0
《你必须知道的.net》读书笔记 002——1.2 什么是继承
    1.2 什么是继承     “对于继承,就应该着手从这些容易误解与引起争论的话题来寻找关于全面认识和了解继承的答案。一点一滴摆出来,最后在对分析的要点做归纳,形成一种系统化认识。这就是一种探索问题的方式,用于剖析继承这一话题真是在恰当不过了。
795 0
|
监控 C#
一起谈.NET技术,浅谈.Net中容易混淆的委托和接口
  本文适合对委托和接口概念非常了解的朋友,并且欢迎各位朋友与Snake一起探讨有关这方面的知识.本文不适合对委托和接口概念或用途了解一知半解(模糊)的朋友,这篇文章可能会对您产生误导,请千万别看.   在文章正式开始之前我需要将MSDN上对委托和接口的内容放上来,作为文章之基.   委托:   委托是一种定义方法签名的类型。
938 0
|
.NET
ASP.NET的地址重写“.NET研究”(URLRewriter)实现原理及代码示例
  一、概述   访问者输入:http://wu-jian.cnbolgs.com/default.aspx,实际请求和响应的地址却是:http://www.cnblogs.com/wu-jian/default.aspx, 这就是UrlRewrite,除了实现二级域名功能,它在简化用户输入地址、SEO、网站版本迭代更新等多个方面发挥着重要作用。
789 0
一起谈.NET技术,.Net Framework源代码中的模式之Prototype(原型模式)
  用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。   以.NET Framework 2.0 System.Collections中类为例。   System.Collections.
965 0
一起谈.NET技术,.NET简谈面向接口编程
  过程式的开发方式已逐渐退出大众的眼线,随之而来的是各种各样的高抽象的开发模式;我们不得不承认在没有设计模式的时候,我们很难总结出有价值的开发模型,便于以后重复使用和推广;面向对象的流行,让我们开发人员重新站在一个高的起点来看待软件模型,抽象固然是好事,但是也给初学者带来了迷惑,将软件中的东西都想成很简单的封装,我们只需要调用就行,这样越来越多的开发人员开始慢慢的往上浮,有一定编程经验和感触的人,能够明白我所说的浮,也算是给初学者提个醒吧。
971 0
.NET“.NET研究”简谈面向接口编程
  过程式的开发方式已逐渐退出大众的眼线,随之而来的是各种各样的高抽象的开发模式;我们不得不承认在没有设计模式的时候,我们很难总结出有价值的开发模型,便于以后重复使用和推广;面向对象的流行,让我们开发人员重新站在一个高的起点来看待软件模型,抽象固然是好事,但是也给初学者带来了迷惑,将软件中的东西都想成很简单的封装,我们只需要调用就行,这样越来越多的开发人员开始慢慢的往上浮,有一定编程经验和感触的人,能够明白我所说的浮,也算上海闵行企业网站设计与制作是给初学者提个醒吧。
969 0
|
Web App开发 JavaScript 前端开发
舍WebServic“.NET研究”e 用.NET4中jQuery调用WCF
  在我们之前的开发中,对于ajax程序,都是通过jQuery调用标记为[System.Web.Script.Services.ScriptService]的WebService,然后在WebService中调用后台的WCF。
835 0
【原创】.Net使用委托讲解-入门
原文地址:【原创】.Net使用委托讲解-入门 什么是委托? 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。
1214 0
|
Web App开发 .NET 测试技术
.net WCF简单实例
  最近看到网上招聘有许多都需要WCF技术的人员,我之前一直没接触过这个东西,以后工作中难免会遇到,所谓笨鸟先飞,于是我就一探究竟,便有了这边文章。由于是初学WCF没有深入研究其原理,只是写了一个demo留着以后,如果哪里写的不对希望大佬们能指出批评。
1011 0