我想在System.Windows.Input.Keyboard中添加一些额外的方法。我试图像这样创建一个局部类;
namespace System.Windows.Input
{
public static partial class Keyboard
{
//some code...
}
}
然而,当我尝试这个时,Resharper通知我这不是一个部分文件,当我尝试使用它时,我得到一个模糊的引用错误,尽管两个键盘都显示在同一个命名空间中。是我试图做的甚至可能,如果没有,为什么不呢?
答案 0 :(得分:5)
不,这是不可能的。 Keyboard
是静态类
静态类无法实例化,无法扩展。
您可以随时编写自己的(静态)类并将您的方法放在那里。
答案 1 :(得分:1)
你不应该使用与Keyboard相同的名称空间,该类应该只是静态的,你可以将你想要的名称命名为“KeyboardExtensions”,例如
有关扩展方法https://msdn.microsoft.com/en-us/library/bb383977.aspx
的信息,请参阅此处答案 2 :(得分:0)
您尝试做的事情是不可能的,因为键盘类不是开始的部分。
模糊引用是由于您创建了一个已存在于同一名称空间中的类,因此编译器不知道要使用哪个类。
你不能创建一个静态类,它继承自@harmoniemand建议的另一个静态类。静态类只能从Object继承。
你不能像@Hamza_L似乎建议的那样在静态类上创建扩展方法,因为你不能在扩展方法中使用静态类型作为参数。
答案 3 :(得分:-1)
通过查看手册,您可以看到System.Windows.Input.Keyboard未定义为部分(look here),因此您无法以这种方式扩展它。
更好的方法是编写一个继承的类。
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid).permit!).first_or_initialize.tap do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.oauth_token = auth.credentials.token
user.refresh_token = auth.credentials.refresh_token
user.profile.first_name = auth.info.first_name
user.profile.last_name = auth.info.last_name
user.profile.email = auth.info.email
user.profile.location = auth.info.location
user.profile.phone = auth.info.phone
user.save!
end
end