c#.. NET可以修改字符串的默认构造吗?

本文关键字:默认 字符串 NET 修改 | 更新日期: 2023-09-27 18:07:20

我看到一些帖子说扩展构造函数不存在,但我想知道是否有另一种方法来实现这一点。

本质上,我的任务是构建一系列web服务(作为消息代理),其中可能将完整的信用卡详细信息传递到任何文本字段中。

我遇到的问题是,无论有人在哪个字段放入完整的信用卡号码(有意或无意),我都需要确保在允许数据被使用或去任何地方之前适当地混淆数据。

与其编写一大堆显式调用和过程中可能丢失的字段,我认为如果可以修改字符串对象的默认行为,以便在实例化时执行此检查,那将是非常好的。这样,数据就不可能漏过了。

忽略这种方法潜在的性能问题,是否有办法真正实现这一点?

c#.. NET可以修改字符串的默认构造吗?

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
}