我有这门课。
public class EmailManager
{
public struct AttachmentFormats
{
public const string Excel = ".xlsx";
public const string Pdf = ".pdf";
}
private static bool SendEmail(string to, string from, ???)
{
/*??? is one of the AttachmentFormats*/
}
}
当用户想要使用SendEmail
时,我想限制它们只使用一个已定义的AttachmentFormats。像
EmailManager.SendEmail("xxx","yy",EmailManager.AttachmentFormats.Excel);
这可能吗?如果是的话,我应该怎么做。
答案 0 :(得分:3)
您需要enum
而不是struct
:
public enum AttachmentFormat
{
xlsx = 0,
pdf = 1
}
public class EmailManager
{
private static bool SendEmail(string to, string @from, AttachmentFormat format)
{
switch(format)
{
case AttachmentFormat.pdf:
// logic
break;
case AttachmentFormat.xlsx:
// logic
break;
}
}
}
其他解决方案是创建实现此接口的接口和类:
public interface IAttachmentFormat {}
public sealed class PDFAttachmentFormat : IAttachmentFormat { }
public sealed class XLSXAttachmentFormat : IAttachmentFormat { }
然后检查SendEmail方法中的类型:
private static bool SendEmail(string to, string @from, IAttachmentFormat format)
{
if(format is PDFAttachmentFormat) // some logic for pdf
if(format is XLSXAttachmentFormat) // some logic for xlsx
}
答案 1 :(得分:0)
如果您希望班级用户拨打SendEmail,则必须公开。
另外,我回应使用Enum而不是结构的早期评论。通过上面的Aram Kocharyan给出的实现,用户可以使用您预先定义的字符串,但不会被强制使用。没有什么能阻止他们打电话:
EmailManager.SendEmail("me","you","Any old string I can make up");
使用枚举方法:
EmailManager.SendEmail("me","you",EmailManager.AttachmentFormat.Excel);