如何扩展System.Windows.Input.Keyboard类

时间:2016-01-15 09:43:24

标签: c#

我想在System.Windows.Input.Keyboard中添加一些额外的方法。我试图像这样创建一个局部类;

namespace System.Windows.Input
{
    public static partial class Keyboard
    {
        //some code...
    }  
}

然而,当我尝试这个时,Resharper通知我这不是一个部分文件,当我尝试使用它时,我得到一个模糊的引用错误,尽管两个键盘都显示在同一个命名空间中。是我试图做的甚至可能,如果没有,为什么不呢?

4 个答案:

答案 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