拆分此方法c#

时间:2011-12-02 15:52:39

标签: c#

我有这个方法:

public void makecall(int TransmitPhoneLoc, int ReceivePhoneLoc)
{
    clsPhone Tphone = (clsPhone) phoneArray[TransmitPhoneLoc];
    clsPhone Rphone = (clsPhone)phoneArray[ReceivePhoneLoc];
    Tphone.ringPhone();
    Rphone.ringPhone();
    //Tphone.hello();
}

我正在尝试将其拆分为两种方法,以便我可以相互独立地使用TphoneRphone。这是我最近的尝试......糟透了我知道,但我正在努力!

public clsPhone incoming(int TransmitPhoneLoc)
{
    clsPhone Tphone = (clsPhone)phoneArray[TransmitPhoneLoc];
    return Tphone;
}

public clsPhone Outgoing(int ReceivePhoneLoc)
{
    clsPhone Rphone = (clsPhone)phoneArray[ReceivePhoneLoc];
    return Rphone;      
}

public void makecall()
{
    // Rphone and Tphone do something?      
}

任何有关如何独立使用这两个对象的帮助将不胜感激。

修改 问题是我不确定如何从我创建的两个方法中取代原始方法的值,并以与原始方法相同的方式实现它们。所以第三种方法是调用第一种和第二种方法。我试图像这样做,因为我将有其他方法,如endcall

这是我的fianl解决方案,谢谢你所有的尝试,我知道要理解像我这样的新手想要完成的事情并不容易。感谢Dilvid为我的最终解决方案提供灵感。我希望现在很清楚我想做什么。我在我的ClsPhone中有一个方法来设置连接,这在ClsExchange中激活。还有其他方法可以结束通话等。

public clsPhone incoming(int TransmitPhoneLoc)
    {
        clsPhone Tphone = (clsPhone)phoneArray[TransmitPhoneLoc];
        return Tphone;
    }
    public clsPhone Outgoing(int ReceivePhoneLoc)
    {

        clsPhone Rphone = (clsPhone)phoneArray[ReceivePhoneLoc];
        return Rphone;

    }
    public void makecall(int tpc, int opc)
    {
        Outgoing(tpc).ringPhone();
        incoming(opc).ringPhone();




    }

5 个答案:

答案 0 :(得分:1)

不确定你要做什么,但是这是怎么回事?它是沿着正确的方向做的吗?

public void MakeCall(int phoneLoc)
{
   clsPhone phone = (clsPhone)phoneArray[phoneLoc];
   phone.ringPhone();
}

用法:由于OP代码表明数组中接收和发送电话的索引值的先验知识,因此可以使用该方法...

MakeCall(tpc);
//and/or
MakeCall(opc);

或者你可以这样做......

public clsPhone GetPhone(int phoneLoc)
{
   return (clsPhone)phoneArray[phoneLoc];
}

用法:

GetPhone(tpc).ringPhone();
//and/or
GetPhone(opc).ringPhone();

班级使用选项:

public class MyClass
{
    clsPhone[] phoneArray;//set this however
    int tpc = 1;
    int opc = 2;

    clsPhone Tphone { get { return GetPhone(tpc); } }
    clsPhone Rphone { get { return GetPhone(opc); } }

    private clsPhone GetPhone(int phoneLoc)
    {
        return (clsPhone)phoneArray[phoneLoc];
    }

    public void MakeCall()
    {
        Tphone.ringPhone();
        Rphone.ringPhone();
    }
}

希望有意义!

答案 1 :(得分:1)

我将前两个方法更改为此(忽略您选择的非标准命名约定):

public clsPhone incoming(int TransmitPhoneLoc) {
    return phoneArray[TransmitPhoneLoc] as clsPhone;
}

public clsPhone Outgoing(int ReceivePhoneLoc) {
    return phoneArray[ReceivePhoneLoc] as clsPhone;
}

你的最后一个方法是:

public void makecall() {
    // You'll need to have the values for rPhoneLoc / tPhoneLoc set somewhere
    //   or as parameters to this method
    var rPhone = Outgoing(rPhoneLoc);
    var tPhone = Incoming(tPhoneLoc);

    rPhone.ringPhone(tPhone);
}

我意识到您的ringPhone方法当前可能不接受目标调用的参数。考虑到你如何使用这两个重构,这个重构可能有意义。

答案 2 :(得分:0)

我想你想要这样的东西:

public void makecall(clsPhone Tphone, clsPhone Rphone)
{
    Tphone.ringPhone();
    Rphone.ringPhone();
}

那么你要做

public static void main()
{
    var phone1 = incoming(213123) // just sample values, idk what int TransmitPhoneLoc is
    var phone2 = Outgoing(345435)
    makecall(phone1, phone2)
}

答案 3 :(得分:0)

为什么不进一步简化:

public MakeCall(int phoneLocation)
{
    clsPhone phone = (clsPhone)phoneArray[phoneLocation];
    phone.ringPhone();
}

...

MakeCall(transmitPhoneLoc);
MakeCall(receivePhoneLoc);

答案 4 :(得分:0)

我相信你是在追求......

public clsPhone Tphone(int TransmitPhoneLoc)
{
clsPhone tempPhone = (clsPhone)phoneArray[TransmitPhoneLoc];
return tempPhone
}

public clsPhone Rphone(int ReceivePhoneLoc)
{
clsPhone tempPhone = (clsPhone)phoneArray[ReceivePhoneLoc];
return tempPhone
}

public void makecall()
{
//use
Tphone(1234).ringPhone();
//or
Rphone(1234).ringPhone();
}