簡體   English   中英

從 C# 中的另一個類調用類中的方法

[英]Call method in class from another class in C#

當我嘗試從另一個類(不是 Main 類)調用方法時,我遇到了一個小問題。 這是我的測試代碼:

using System;

namespace ConsoleApplication3
{
    public class Program
    {
        static void Main(string[] args)
        {
            Class1 cl = new Class1();
            cl.TestMethod();
        }
    }

    public class Class1
    {
        public string TestMethod()
        {
            return "test";
        }
    }

    public class Class2
    {
        Class1 cl = new Class1();
        cl.TestMethod(); //Error here
    }
}

我應該怎么做才能在 Class2 中調用 TestMethod?

您不能從方法,構造函數或第二個屬性更改類外部調用方法:

public class Class2
{
    public Class2
    {
       Class1 cl = new Class1();
       cl.TestMethod(); //Error here
    }}

您不能將方法調用到類主體中。 指定方法,例如,將您的代碼放入Class2構造函數中,如下所示:

using System;

namespace ConsoleApplication3
{
    public class Program
    {
        static void Main(string[] args)
        {
            Class1 cl = new Class1();
            cl.TestMethod();
        }
    }

    public class Class1
    {
        public string TestMethod()
        {
            return "test";
        }
    }

    public class Class2
    {
        Class1 cl = new Class1();

        public Class2()
        {
            cl.TestMethod();
        }
    }
}

我認為您將類與方法混淆。

方法是子例程,是一部分代碼,可以從代碼的其他部分調用這些代碼,並按順序運行。

類是數據類型。 您創建類的特定實例,然后訪問其屬性或調用其方法。

所以Main是一個方法,而不是一個類。 具體來說,它是程序類的一種方法。

在一個類中,所有可執行代碼必須在方法內部。 該規則的一個(某種)例外是您可以在方法外部初始化成員。 那就是您對c1 = new Class1()所做的事情。 使用new創建類時,將隱式執行這些語句。

要調用class1方法,您必須在class2上聲明一個方法來執行它。l,或定義一個調用該方法的構造函數。 但是,讓構造函數執行大量工作是非常不好的做法。 構造只能執行類起作用之類的初始化成員之類的事情。

您已經定義了第二個類,它需要一個方法或其中的構造函數才能使其正常工作。 將其包裝在實例化周圍,它將可以訪問:)

有一個簡單的解決方案。 就像你用 Math.Abs​​() 做的那樣; 你應該使用靜態方法,

using System;

namespace ConsoleApplication3
{
    public class Program
    {
        static void Main(string[] args)
        {
            Class1 cl = new Class1();
            cl.TestMethod();
            C_Auxilary.F_TestMeth();   
        }
    }

    public class Class1
    {
        public string TestMethod()
        {
            return "test";
        }
    }

    public class Class2
    {
        Class1 cl = new Class1();
        cl.TestMethod(); //Error here
    }
}

namespace ConsoleApplication3
{
    public static class C_Auxilary
    {
        public static void F_TestMeth()
        {
            ;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM