无法在其他功能中使用功能

时间:2019-12-30 12:21:53

标签: c#

我无法在函数中使用函数“ tranferfiles”

我该在哪里更改?

该功能应该是公共功能吗?还是只能在创建新类时使用其他功能?

namespace Webshopfiletransfer
{
    public partial class Webshopfiletransfer : ServiceBase
    {
        private static System.Timers.Timer aTimer;

        public Webshopfiletransfer()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            SetTimer();

            aTimer.Start();
        }

        private static void SetTimer()
        {
         // Create a timer with a two second interval.
            aTimer = new System.Timers.Timer(30000);
         // Hook up the Elapsed event for the timer. 
            aTimer.Elapsed += OnTimedEvent;
            aTimer.AutoReset = true;
            aTimer.Enabled = true;
        }

        private static void OnTimedEvent(Object source, ElapsedEventArgs e)
        {            
            transferfiles("download");
          //transferfiles("upload");
        }

        private void transferfiles(string modus)
        {
        }
    }
}

5 个答案:

答案 0 :(得分:2)

您不能在静态方法中调用非静态方法。静态方法或属性只能调用同一类的其他静态方法或属性。

定义静态方法或字段时,它无权访问为该类定义的任何实例字段,只能使用标记为静态的字段。

静态(C#参考):here

更改

private void transferfiles(string modus)
{

}

 private static void transferfiles(string modus)
 {

 }

或者您可以创建该类的实例

 private static void OnTimedEvent(Object source, ElapsedEventArgs e)
 {
        Webshopfiletransfer webshopfiletransfer  = new Webshopfiletransfer();
        webshopfiletransfer.transferfiles("download");
        //transferfiles("upload");
 }

答案 1 :(得分:1)

  

我无法在函数中使用函数“ tranferfiles”。

由于您的OnTimeEvent()是静态函数而您的transferfiles()不是静态函数,请将transferfiles()函数更改为静态。

通过将您的transferfiles()函数更改为静态函数,将在不创建其类实例的情况下调用该函数

private static void transferfiles(string modus)
{
   //Your code
}

From MSDN:

  

静态方法和属性无法访问非静态字段,并且   事件(其包含类型),因此无法访问实例   任何对象的变量,除非在方法中明确传递   参数。

答案 2 :(得分:1)

您应将transferfiles方法标记为静态。

private static void transferfiles(string modus)

答案 3 :(得分:0)

私有功能只能在同一类中使用。 如果要在其他类中(外部)使用它,则必须将其更改为public。

另外检查已经提到的静态内容。可以使用静态函数而无需实例化类中的对象。如果您不想创建对象,请将其更改为static。 否则,请从该类中创建一个对象,然后从该对象中调用传输文件。

答案 4 :(得分:0)

第一种方法,您可以将方法从非静态方法更改为静态方法。

 private static void transferfiles(string modus)
 {    
 }

,您可以在静态方法中创建该类的实例,然后调用它。您必须先创建其父类的实例才能调用非静态方法。因此,从静态方法开始,您将不得不实例化一个新对象。

private static void OnTimedEvent(Object source, ElapsedEventArgs e)
{
    Webshopfiletransfer c1 = new Webshopfiletransfer();
    c1. transferfiles("download");
}

Help Link