小编Tza*_*ama的帖子

C#OOP组成和概括同时进行

这可能是一个简单/基本的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)

c# oop composition generalization

17
推荐指数
6
解决办法
2802
查看次数

试图了解Monads.>>运营商

我是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绑定运算符忽略其第一个操作的值,并仅作为整体结果返回其第二个操作的结果.

所以我对这个运算符的使用感到困惑,我想问两件事:

  1. 什么它实际上做什么?
  2. 什么时候有用?

monads haskell operator-keyword

11
推荐指数
3
解决办法
452
查看次数

更改系统语言C#

我正在编写一个应用程序,当应用程序本身没有聚焦时,我需要更改系统的语言.我担心这样做的唯一方法就是使用我目前无法完全理解的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)

.net c# windows

9
推荐指数
1
解决办法
5502
查看次数

替换特定位置的字符

我的输入是一个表示机器执行时间和日期的字符串.问题是这个字符串的格式很糟糕,因此我无法DateTime.Parse将其转换为DateTime对象.

输入示例:

2014-01-07-15.26.46.000452

我需要将它转换为我可以使用的东西(用空格替换最后的' - ',用'​​:'替换前2'.'),如下所示:

2014-01-07 15:26:46.0​​00452

我想我应该使用正则表达式来解决这个问题因为我需要替换特定位置的字符,所以myString.Replace不会有任何好处.不幸的是,我使用正则表达式的知识几乎没有,我找不到任何与我的问题相符的例子.

任何人都可以帮我解决这个问题吗?(另外,我想解释这个正则表达式的工作方式和原因)

c# regex string

0
推荐指数
1
解决办法
48
查看次数