标签归档:.net

Pinyin4Net .NET 使用的拼音库

.net使用的汉字转拼音库。使用Pinyin4J 的拼音数据库,与Pinyin4J一样支持设置输出拼音的格式,提供了更简单的调用接口。另外提供了通过拼音查询汉字的接口。
基于.net 2.0

阅读全文 Pinyin4Net .NET 使用的拼音库

在C# 中根据类名称使用类实例

这个类提供了简单的属性(字段)的读写和方法的调用。类中没有进行严谨的检查,比如属性是否可读或可写等。

using System;
using System.Reflection;
using System.Linq;

namespace Test
{
    public class ClassHepler
    {
        private string assemblyName;
        private Type type;
        private object instance;
        MemberInfo[] members;

        /// <summary>
        ///  创建目标类实例
        /// </summary>
        /// <param name="assemblyName">包含命名空间的完整类名称</param>
        /// <param name="param">构造函数的参数列表</param>
        public ClassHepler(string assemblyName, object[] param)
        {
            this.assemblyName = assemblyName;
            this.type = Type.GetType(assemblyName, true);
            members = type.GetMembers();
            instance = Activator.CreateInstance(type, param);
        }

        /// <summary>
        /// 设置Property或者Field的值
        /// </summary>
        /// <param name="name">Property或者Field变量名称</param>
        /// <param name="value">要设置的值</param>
        public void SetValue(string name, object value)
        {
            MemberInfo member = members.FirstOrDefault(_ =>
            (_.MemberType == MemberTypes.Field || _.MemberType == MemberTypes.Property)
            && _.Name == name);
            if (member == null)
            {
                throw new ArgumentNullException("name", "Can not find Property or Field \"" + name + "\" in  class \"" + this.assemblyName + "\" .");
            }

            if (member.MemberType == MemberTypes.Field)
            {
                FieldInfo item = type.GetField(name);
                item.SetValue(instance, value);
            }
            else
            {
                PropertyInfo item = type.GetProperty(name);
                item.SetValue(instance, value, null);
            }
        }

        /// <summary>
        /// 获取Property或者Field的值
        /// </summary>
        /// <param name="name">Property或者Field变量名称</param>
        /// <returns></returns>
        public object GetValue(string name)
        {
            MemberInfo member = members.FirstOrDefault(_ =>
            (_.MemberType == MemberTypes.Field || _.MemberType == MemberTypes.Property)
            && _.Name == name);
            if (member == null)
            {
                throw new ArgumentNullException("name", "Can not find Property or Field \"" + name + "\" in  class \"" + this.assemblyName + "\" .");
            }

            if (member.MemberType == MemberTypes.Field)
            {
                FieldInfo item = type.GetField(name);
                return item.GetValue(instance);
            }
            else
            {
                PropertyInfo item = type.GetProperty(name);
                return item.GetValue(instance, null);
            }
        }
        /// <summary>
        /// 调用方法
        /// </summary>
        /// <param name="methodName">方法名称</param>
        /// <param name="param">参数列表</param>
        /// <returns></returns>
        public object InvokeMethod(string methodName, object[] param)
        {
            if (members.Any(_ => _.MemberType == MemberTypes.Method))
            {
                MethodInfo method = type.GetMethod(methodName);
                return method.Invoke(instance, param);
            }
            else
            {
                throw new ArgumentNullException("name", "Can not find Method \"" + methodName + "\" in  class \"" + this.assemblyName + "\" .");
            }
        }

        /// <summary>
        /// 调用反射类的ToString()方法
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            object retValue = this.InvokeMethod("ToString", null);
            return retValue == null ? "" : retValue.ToString();
        }
    }
}

调用示例:

using System;

namespace Test
{
    public class TestClass
    {
        public int id { get; set; }
        public string name;

        public bool DoIHaveName()
        {
            return !string.IsNullOrEmpty(name);
        }

        public string SayHello(string toName)
        {
            return string.Format("Hello, {0}, my id is {1} and my name is {2}.", toName, id, name);
        }

        public override string ToString()
        {
            return string.Format("[id={0}, name={1}]", id, name);
        }
    }
    public class TestClassHelper
    {
        public void Run()
        {
            // 创建类 TestClass的实例
            ClassHepler ch = new ClassHepler("Test.TestClass", null);

            // 写属性 id 的值
            ch.SetValue("id", 1);
            // 写字段 name 的值
            ch.SetValue("name", "hyjiacan");

            // 读属性 id
            Console.WriteLine("id: {0}", ch.GetValue("id"));
            // 读字段 name
            Console.WriteLine("name: {0}", ch.GetValue("name"));

            // 调用方法 DoIHaveName
            object haveName = ch.InvokeMethod("DoIHaveName", null);
            // 输出方法返回值
            Console.WriteLine("HaveName: {0}", haveName);

            // 调用方法 SayHello
            object hello = ch.InvokeMethod("SayHello", new object[] { "everyone" });
            // 输出方法返回值
            Console.WriteLine("Say: {0}", hello);

            // 调用类 TestClass 的 ToString 方法
            Console.WriteLine(ch.ToString());
        }
    }
}

输出:

id: 1
name: hyjiacan
HaveName: True
Say: Hello, everyone, my id is 1 and my name is hyjiacan.
[id=1, name=hyjiacan]

c# 注册表读写类以及设置程序开始自动启动

本类提供了对注册表的简单读写功能,以及设置和检查指定程序是否是开机自动启动。

开机自动启动调用示例

// 检查是否是开机启动
bool x = RegistryKeyEdit.IsStartOnBoot(Application.ProductName, Application.ExecutablePath);
Console.WriteLine(x);
// 最后一个参数为true时设置成开机启动,否则禁止开机启动
RegistryKeyEdit.SetStartOnBoot(Application.ProductName, Application.ExecutablePath, true);
// 检查是否是开机启动
x = RegistryKeyEdit.IsStartOnBoot(Application.ProductName, Application.ExecutablePath);
Console.WriteLine(x);

注意:在写注册表(包括设置开机启动)时,如果是写入 LocalMachine,那么需要程序以管理员身份运行。

阅读全文 c# 注册表读写类以及设置程序开始自动启动

SuperSocket.ClientEngine 简单使用

江大没有给ClientEngine的Demo,一直没有找到其它的。。 自己从 websocket4net 项目中看了一些,然后写了一个简单的命令行的Client。
阅读全文 SuperSocket.ClientEngine 简单使用

在c#中使用SMTP通过腾讯企业邮发邮件

腾讯企业邮:http://exmail.qq.com/

按腾讯的说法,其企业邮箱为了保证安全性,现只能通过SSL方式发邮件。


POP3/SMTP协议
接收邮件服务器:pop.exmail.qq.com ,使用SSL,端口号995
发送邮件服务器:smtp.exmail.qq.com ,使用SSL,端口号465
海外用户可使用以下服务器
接收邮件服务器:hwpop.exmail.qq.com ,使用SSL,端口号995
发送邮件服务器:hwsmtp.exmail.qq.com ,使用SSL,端口号465

IMAP协议
接收邮件服务器:imap.exmail.qq.com ,使用SSL,端口号993
发送邮件服务器:smtp.exmail.qq.com ,使用SSL,端口号465
海外用户可使用以下服务器
接收邮件服务器:hwimap.exmail.qq.com ,使用SSL,端口号993
发送邮件服务器:hwsmtp.exmail.qq.com ,使用SSL,端口号465

经过测试,在使用腾讯企业邮的时候,可以使用的smtp服务器可以是:
smtp.qq.com
或者
smtp.exmail.qq.com

而重要的是端口,使用上面说的465不能访问,始终返回超时(当然使用非SSL的25端口也会失败);
而通过端口587可以访问。

阅读全文 在c#中使用SMTP通过腾讯企业邮发邮件

RunASAdministrator 以管理员身份运行程序

说明:
1 将程序直接拖到此程序上,会自动在系统桌面上创建快捷方式
2 如果要通过此程序运行程序,那么需要创建此程序的快捷方式,并传参数: /exec 要运行的文件路径

注意:
1 目前仅支持exe程序,即路径中必须包含扩展名 .exe
2 程序文件路径使用引号(“”)包含,如果有目标程序需要参数,则也需要被包含在内

示例:
RunAsAdmin.exe /exec “C:\Windows\notepad.exe”
RunAsAdmin.exe /exec “C:\Windows\notepad.exe D:\test.txt”
RunAsAdmin.exe /exec “C:\Windows\System32\cmd.exe /C /Q”

run as administrator

阅读全文 RunASAdministrator 以管理员身份运行程序

数据库操作工具包 sqlserverdb.1.0.2

简介:
SqlServerDB.dll是SqlServer数据库操作的实用工具包。内含xml配置文件,可以保存连接信息,也可以快速通过配置文件修改到数据库的连接。

功能:

  • 内置两种数据库连接方式,SQLSERVER身份认证和WINDOWS身份认证。
  • 枚举当前连接到的数据实例上所有的数据库名。
  • 枚举当前连接到的数据库的表名。
  • 枚举当前连接到的数据库的指定表的列信息。
  • 执行数据库查询。
  • 使用事务。

阅读全文 数据库操作工具包 sqlserverdb.1.0.2