当前位置:  编程技术>.net/c#/asp.net
本页文章导读:
    ▪标志枚举      枚举分为简单枚举和标志枚举。简单枚举包含的值不用于组合,也不用于按位比较。标志枚举可以使用OR操作进行组合;设计标记枚举时要注意两点:1. 指明FlagsAttribute,以指示可以将枚举作.........
    ▪使用C#发送邮件      VS2005中做了升级,用一个新的 System.Net.Mail  类,由于我最近刚好在学习VS2005,所以抛弃了以前的那个程序,现学现卖就是想秀秀技术,其实也没什么技术含量的。MailAddress from = new MailAd.........
    ▪显式接口实现      如果类实现两个接口,并且这两个接口包含具有相同签名的成员,那么在类中实现该成员将导致两个接口都使用该成员作为它们的实现。例如:interface IControl{ void Paint();}interface ISurface{ voi.........

[1]标志枚举
    来源:    发布时间: 2013-10-28

枚举分为简单枚举和标志枚举。

简单枚举包含的值不用于组合,也不用于按位比较。

标志枚举可以使用OR操作进行组合;

设计标记枚举时要注意两点:1. 指明FlagsAttribute,以指示可以将枚举作为域(即一组标志)处理;

   2. 枚举中各标志的值应该是以2的幂来赋值,即:1、2、4、8、16…

标志枚举的作用:举个例子,假如设计一个文件属性,有Hidden、ReadOnly、Encrypt,文件可能具有三个属性的任意组合,如果使用简单枚举,按照排列组合,需要1 + 3 + 3 + 1 = 8个枚举数,如果属性再多的话,将需要更多的枚举数。这时就可以使用标志枚举了。

[Flags]

public enum FileProperty

{

    Hidden = 1,

    ReadOnly = 2,

    Encrypt = 4,

}

设置文件属性时,就可以利用OR自由组合:FileProperty fileP = FileProperty.Hidden | FileProperty.ReadOnly;

从这可以看出为什么标志的值要按2的幂排列,也可以看出标志多于32个时不能使用int类型的原因。相当于使用一个数组,属性的排列顺序与数组下标一一对应,当某个下标处的值为0时,表示对应的属性没有在组合中。

File类的GetAttributes()返回的就是一个枚举值的组合,如何确定组合中包含某个属性,可以使用&(and)操作符

FileAttributes attributes = File.GetAttributes(fileName);

attributes & FileAttributes.Hidden == FileAttributes.Hidden 结果为true时表示存在这个属性。

本文链接


    
[2]使用C#发送邮件
    来源:    发布时间: 2013-10-28

VS2005中做了升级,用一个新的 System.Net.Mail  类,由于我最近刚好在学习VS2005,所以抛弃了以前的那个程序,现学现卖就是想秀秀技术,其实也没什么技术含量的。

MailAddress from = new MailAddress("gaosheng@hotmail.com", "高升"); //邮件的发件人

MailMessage mail = new MailMessage();

//设置邮件的标题
mail.Subject = txtSubject.Text;

//设置邮件的发件人
//Pass:如果不想显示自己的邮箱地址,这里可以填符合mail格式的任意名称,真正发mail的用户不在这里设定,这个仅仅只做显示用
mail.From = from;

//设置邮件的收件人
string address = "";
string displayName = "";
/**//* 这里这样写是因为可能发给多个联系人,每个地址用 ; 号隔开
一般从地址簿中直接选择联系人的时候格式都会是 :用户名1 < mail1 >; 用户名2 < mail 2>;
因此就有了下面一段逻辑不太好的代码
如果永远都只需要发给一个收件人那么就简单了 mail.To.Add("收件人mail");
*/
string[] mailNames = (txtMailTo.Text + ";").Split(';');
foreach (string name in mailNames)
...{
if (name != string.Empty)
...{
if (name.IndexOf('<') > 0)
...{
displayName = name.Substring(0, name.IndexOf('<'));
address = name.Substring(name.IndexOf('<') + 1).Replace('>', ' ');
}
else
...{
displayName = string.Empty;
address = name.Substring(name.IndexOf('<') + 1).Replace('>', ' ');
}
mail.To.Add(new MailAddress(address, displayName));
}
}

//设置邮件的抄送收件人
//这个就简单多了,如果不想快点下岗重要文件还是CC一份给领导比较好
mail.CC.Add(new MailAddress("Manage@hotmail.com", "尊敬的领导");

//设置邮件的内容
mail.Body = txtBody.Text;
//设置邮件的格式
mail.BodyEncoding = System.Text.Encoding.UTF8;
mail.IsBodyHtml = true;
//设置邮件的发送级别
mail.Priority = MailPriority.Normal;

//设置邮件的附件,将在客户端选择的附件先上传到服务器保存一个,然后加入到mail中
string fileName = txtUpFile.PostedFile.FileName.Trim();
fileName = "D:/UpFile/" + fileName.Substring(fileName.LastIndexOf("/") + 1);
txtUpFile.PostedFile.SaveAs(fileName); // 将文件保存至服务器
mail.Attachments.Add(new Attachment(fileName));

mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;

SmtpClient client = new SmtpClient();
//设置用于 SMTP 事务的主机的名称,填IP地址也可以了
client.Host = "smtp.hotmail.com";
//设置用于 SMTP 事务的端口,默认的是 25
//client.Port = 25;
client.UseDefaultCredentials = false;
//这里才是真正的邮箱登陆名和密码,比如我的邮箱地址是 hbgx@hotmail, 我的用户名为 hbgx ,我的密码是 xgbh
client.Credentials = new System.Net.NetworkCredential("hbgx", "xgbh");
client.DeliveryMethod = SmtpDeliveryMethod.Network;
//都定义完了,正式发送了,很是简单吧!
client.Send(mail);

 

原文 http://blog.csdn.net/hb_gx/article/details/2298945#comments

 

本文链接


    
[3]显式接口实现
    来源:    发布时间: 2013-10-28

如果类实现两个接口,并且这两个接口包含具有相同签名的成员,那么在类中实现该成员将导致两个接口都使用该成员作为它们的实现。例如:

interface IControl
{
void Paint();
}
interface ISurface
{
void Paint();
}
class SampleClass : IControl, ISurface
{
// Both ISurface.Paint and IControl.Paint call this method.
public void Paint()
{
}
}

然而,如果两个接口成员执行不同的函数,那么这可能会导致其中一个接口的实现不正确或两个接口的实现都不正确。可以显式地实现接口成员 -- 即创建一个仅通过该接口调用并且特定于该接口的类成员。这是使用接口名称和一个句点命名该类成员来实现的。例如:

public class SampleClass : IControl, ISurface
{
void IControl.Paint()
{
System.Console.WriteLine("IControl.Paint");
}
void ISurface.Paint()
{
System.Console.WriteLine("ISurface.Paint");
}
}

类成员 IControl.Paint 只能通过 IControl 接口使用,ISurface.Paint 只能通过 ISurface 使用。两个方法实现都是分离的,都不可以直接在类中使用。例如:

SampleClass obj = new SampleClass();
//obj.Paint(); // Compiler error.

IControl c = (IControl)obj;
c.Paint(); // Calls IControl.Paint on SampleClass.

ISurface s = (ISurface)obj;
s.Paint(); // Calls ISurface.Paint on SampleClass.

显式实现还用于解决两个接口分别声明具有相同名称的不同成员(如属性和方法)的情况:

interface ILeft
{
int P { get;}
}
interface IRight
{
int P();
}

为了同时实现两个接口,类必须对属性 P 和/或方法 P 使用显式实现以避免编译器错误。例如:

class Middle : ILeft, IRight
{
public int P() { return 0; }
int ILeft.P { get { return 0; } }
}

 

 

本文链接


    
最新技术文章:
▪C#通过IComparable实现ListT.sort()排序
▪C#实现对Json字符串处理实例
▪Winform实现抓取web页面内容的方法
▪Winform实现将网页生成图片的方法
▪C#控制台程序中处理2个关闭事件的代码实例
▪WinForm实现同时让两个窗体有激活效果的特效...
▪WinForm实现拦截窗体上各个部位的点击特效实...
▪用C#的params关键字实现方法形参个数可变示例
▪C#判断某程序是否运行的方法
▪C#验证码识别基础方法实例分析
▪C#通过WIN32 API实现嵌入程序窗体
▪C#实现获取鼠标句柄的方法
▪C#事件处理和委托event delegate实例简述
▪C#获取程序文件相关信息的方法
▪C#中的除法运算符与VB.NET中的除法运算符
▪ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(PagedLi...
▪Base64编码解码原理及C#编程实例
▪C#实现的优酷真实视频地址解析功能(2014新算...
▪C#和SQL实现的字符串相似度计算代码分享
▪C#使用Word中的内置对话框实例
▪C#反射之基础应用实例总结
▪C#生成单页静态页简单实例
▪C#实现SMTP邮件发送程序实例
▪C#实现随鼠标移动窗体实例
▪C#使用GDI+创建缩略图实例
▪C#实现通过模板自动创建Word文档的方法
▪C#中Response.Write常见问题汇总
▪C#中多态、重载、重写区别分析
▪WinFrom中label背景透明的实现方法
▪C#中out保留字用法实例分析
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3