这可能是一个简单/基本的OOP问题,但我仍然无法弄清楚如何解决它.我在访谈中遇到了以下问题:制作一个UML类图并编写一个"智能"手机的基本代码,其中包含电话和MP3播放器的功能.我们有以下(接受)解决方案:
class Telephone
{
public string name { get; set; }
public Telephone()
{
name = "name telephone";
}
}
class MP3
{
public string name { get; set; }
public MP3()
{
name = "name mp3";
}
}
Run Code Online (Sandbox Code Playgroud)
而"智能"手机类:
class TelephoneMP3
{
public Telephone tel;
public MP3 mp3;
public TelephoneMP3()
{
tel = new Telephone();
mp3 = new MP3();
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我们在TelephoneMP3和Telephone/MP3类之间有一个组合关系.
但是,使用此代码,TelephoneMP3不是电话,而且TelephoneMP3也不是MP3,这是不合逻辑的.那么,为了使这个有效,我应该做些什么改变?例如,这种测试:
if (telMp3 is Telephone)
{
Console.WriteLine("TelephoneMP3 is telephone");
}
if (telMp3 is MP3)
{
Console.WriteLine("TelephoneMP3 is …Run Code Online (Sandbox Code Playgroud) 我是haskell的新手,我正在通过LearnYouAHaskell学习.我只是无法理解(>>)运营商背后的原因.
默认实现是:
(>>) :: (Monad m) => m a -> m b -> m b
m >> n = m >>= \_ -> n
Run Code Online (Sandbox Code Playgroud)
这是(据我所知)忽略第一个值并返回第二个值.但是,从LearnYouAHaskell中的示例来看,这种情况发生了:
ghci>没什么>>只是3
没什么
ghci>只是3 >>什么都
没有
所以它不会忽略第一个值.然而,通过一些研究,我从这里找到了这个引用
>> function绑定运算符忽略其第一个操作的值,并仅作为整体结果返回其第二个操作的结果.
所以我对这个运算符的使用感到困惑,我想问两件事:
我正在编写一个应用程序,当应用程序本身没有聚焦时,我需要更改系统的语言.我担心这样做的唯一方法就是使用我目前无法完全理解的Windows钩子.有什么想法吗?
编辑:解决方案
[DllImport("user32.dll")]
private static extern bool PostMessage(int hhwnd, uint msg, IntPtr wparam, IntPtr lparam);
[DllImport("user32.dll")]
private static extern IntPtr LoadKeyboardLayout(string pwszKLID, uint Flags);
private static uint WM_INPUTLANGCHANGEREQUEST = 0x0050;
private static int HWND_BROADCAST = 0xffff;
private static string en_US = "00000409";
private static uint KLF_ACTIVATE = 1;
private static void ChangeLanguage()
{
PostMessage(HWND_BROADCAST,WM_INPUTLANGCHANGEREQUEST, IntPtr.Zero ,LoadKeyboardLayout(en_US,KLF_ACTIVATE));
}
Run Code Online (Sandbox Code Playgroud) 我的输入是一个表示机器执行时间和日期的字符串.问题是这个字符串的格式很糟糕,因此我无法DateTime.Parse将其转换为DateTime对象.
输入示例:
2014-01-07-15.26.46.000452
我需要将它转换为我可以使用的东西(用空格替换最后的' - ',用':'替换前2'.'),如下所示:
2014-01-07 15:26:46.000452
我想我应该使用正则表达式来解决这个问题因为我需要替换特定位置的字符,所以myString.Replace不会有任何好处.不幸的是,我使用正则表达式的知识几乎没有,我找不到任何与我的问题相符的例子.
任何人都可以帮我解决这个问题吗?(另外,我想解释这个正则表达式的工作方式和原因)