在某些情况下,我想要使用扩展方法覆盖类中的方法.有没有办法在C#中做到这一点?
例如:
public static class StringExtension
{
public static int GetHashCode(this string inStr)
{
return MyHash(inStr);
}
}
Run Code Online (Sandbox Code Playgroud)
在那里我一直想做到这一点的情况是能够将一个字符串的哈希存储到数据库中,并有相同的值由所有使用String类的哈希值(即词典等)由于类使用内置的.Net哈希算法不能保证从一个版本的Framework到下一个版本兼容,我想用我自己的版本替换它.
还有其他情况我遇到了我想用扩展方法覆盖类方法的地方,所以它不仅仅特定于字符串类或GetHashCode方法.
我知道我可以通过子类化现有的类来做到这一点但是在很多情况下能够使用扩展来做它会很方便.
我正在阅读C#3.0中的扩展方法.我正在阅读的文本暗示,与正在扩展的类中的方法具有相同签名的扩展方法将按执行顺序排在第二位 - 也就是说,密封类中的方法被调用.如果是这种情况,你怎么能延长密封班?
我想覆盖.ToString()函数,这样每当我得到一个double时,它只输出小数点后的5位数.
如何在覆盖函数内部对.ToString正在处理的对象进行处理?换句话说,我在下面的代码中放了什么shell而不是XXX?
public override string ToString()
{
if (XXX.GetType().Name == "Double")
return (Math.Round(XXX, 5));
}
Run Code Online (Sandbox Code Playgroud) 使用以下代码片段的简单示例:
using System.Data;
using CustomerNameSpace;
...
...
CDataSet.CustomerDataTable dtCustomer = GetCustomer();
var customersWithName = dtCustomer.AsEnumerable()
.Where(x => x.Name != null)
.CopyToDataTable();
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我的同事CopyToDataTable()在CustomerNameSpace.
本例中的程序同时使用命名空间System.Data和CustomerNameSpace.
现在两者都包含扩展方法CopyToDataTable()。
在下面的示例片段中,有没有办法指定要使用这两个命名空间中的哪些扩展方法?