我想知道如何在c#中實現MyString類並重載運算符<<
和>>
。 例如:自定義字符串實現超載運算符<< and >>在c#中字符串字符的二進制移位
MyString name = "string";
Console.Write(name<<3) // It will print **ingstr** by shifting last 3 to left
我目前的實現如下:
public sealed class MyString
{
private readonly string _value="";
public MyString(string str)
{
_value = str;
}
public override string ToString()
{
return _value;
}
public static implicit operator MyString(string str)
{
var myString = new MyString(str);
return myString;
}
public static explicit operator string(MyString myString)
{
return myString._value;
}
public override bool Equals(Object obj)
{
if (obj == null)
{
return false;
}
var s = obj as MyString;
if ((object)s == null)
return false;
return _value.Equals(obj);
}
public bool Equals(MyString str)
{
return _value.Equals(str);
}
public override int GetHashCode()
{
return _value.GetHashCode();
}
public static bool operator ==(MyString a, MyString b)
{
return a._value.Equals(b.ToString());
}
public static bool operator !=(MyString a, MyString b)
{
return !(a == b);
}
public static MyString operator <<(MyString s, int shift)
{
if (shift <= 0)
{
return s;
}
shift = shift % s._value.Length;
return s._value.Substring(shift, s._value.Length - shift)
+ s._value.Substring(0, shift);
}
public static MyString operator >>(MyString s, int shift)
{
if (shift <= 0)
return s;
shift = shift%s._value.Length;
return s._value.Substring(shift, s._value.Length - shift) + s._value.Substring(0,shift);
}
}
}
首先,我勸你不要這樣做 - 但你試過嗎?你有多遠?你遇到了什麼問題? – 2012-04-14 08:41:29
不要把它放在評論中 - 編輯你的*問題*。請閱讀http://tinyurl.com/so-hints – 2012-04-14 08:43:14
所以你現在已經展示了你的實現 - 試圖實現shift操作符時出了什麼問題?你清楚知道如何爲'=='和'!='來重載操作符(雖然你有沒有重寫Equals和GetHashCode有點奇怪),那麼'<<'出了什麼問題? – 2012-04-14 08:48:20