c#.. NET可以修改字符串的默认构造吗?
本文关键字:默认 字符串 NET 修改 | 更新日期: 2023-09-27 18:07:20
我看到一些帖子说扩展构造函数不存在,但我想知道是否有另一种方法来实现这一点。
本质上,我的任务是构建一系列web服务(作为消息代理),其中可能将完整的信用卡详细信息传递到任何文本字段中。
我遇到的问题是,无论有人在哪个字段放入完整的信用卡号码(有意或无意),我都需要确保在允许数据被使用或去任何地方之前适当地混淆数据。
与其编写一大堆显式调用和过程中可能丢失的字段,我认为如果可以修改字符串对象的默认行为,以便在实例化时执行此检查,那将是非常好的。这样,数据就不可能漏过了。
忽略这种方法潜在的性能问题,是否有办法真正实现这一点?
System.Security。SecureString类
http://msdn.microsoft.com/en-us/library/system.security.securestring.aspx最后,我选择了@sambomartin建议的方法
我创建了一个不同的类,将字符串封装在对象的属性中。
真正的技巧是隐式操作符覆盖。加上一些与字符串实现相同的接口,这允许我创建一个类(到目前为止)在代码中相当无缝地操作。
public class MyString : IComparable, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>
{
#region Static Operators
public static implicit operator MyString(string value)
{
return new MyString(value);
}
public static implicit operator string(MyString value)
{
return value.value;
}
public static bool operator !=(MyString a, MyString b)
{
return a.value != b.value;
}
public static bool operator ==(MyString a, MyString b)
{
return a.value == b.value;
}
public static bool operator !=(MyString a, string b)
{
return a.value != b;
}
public static bool operator ==(MyString a, string b)
{
return a.value == b;
}
public static bool operator !=(string a, MyString b)
{
return a != b.value;
}
public static bool operator ==(string a, MyString b)
{
return a == b.value;
}
#endregion
private string value;
public int Length
{
get { return (value != null) ? value.Length : 0; }
}
public MyString(string value)
{
this.value = PciCleaner.Clean(value);
}
#region Object Overrides
public override string ToString()
{
return value;
}
public override bool Equals(object obj)
{
return (value != null) ? value.Equals(obj) : false;
}
public override int GetHashCode()
{
return (value != null) ? value.GetHashCode() : new object().GetHashCode();
}
#endregion
#region IComparable
public int CompareTo(object obj)
{
return (value != null) ? value.CompareTo(obj) : -1;
}
#endregion
#region IComparable<string>
public int CompareTo(string other)
{
return (value != null) ? value.CompareTo(other) : -1;
}
#endregion
#region IEnumerable<char>
public IEnumerator<char> GetEnumerator()
{
return (value != null) ? value.GetEnumerator() : null;
}
#endregion
#region IEnumerable
IEnumerator IEnumerable.GetEnumerator()
{
return (value != null) ? (value as IEnumerable).GetEnumerator() : null;
}
#endregion
#region IEquatable<string>
public bool Equals(string other)
{
return (value != null) ? value.Equals(other) : false;
}
#endregion
}