如何从另一个类实例调用类方法

时间:2018-02-25 04:20:55

标签: c#

我是C#的新手,我对如何使这项工作有疑问:

namespace Core {
    public class A{
        private reandonly string _var;
        public A(string var){
            _var=var
        }
        public GetValue() => return _var;
    }
}

using System;
namespace Core.Resources {
    public static class B{
        public static void DoSomething(){
            Console.Writeline($"{A.GetValue()}");
        }
    }
}

public class C{
    static void Main(string args[]){
        A a = new A("name");
        a.Resources.B.DoSomething();
    }
}

A位于主文件夹中,B位于Main/Resources文件夹中,它们共同构成一个类库,Program.cs正在使用此库。有没有办法使这项工作?

1 个答案:

答案 0 :(得分:0)

如果你写a.Resources,你基本上是在尝试检索类Resources的成员A,这显然没有定义。由于BCore.Resources命名空间中定义的静态类,因此您只需按如下方式更改代码:

public class C
{
    public static void Main(string args[])
    {
        A a = new A("A");
        Core.Resources.B.DoSomething();
    }
}

或者,如果您不希望每次都引用命名空间:

using Core.Resources;

public class C
{
    public static void Main(string args[])
    {
        A a = new A("A");
        B.DoSomething();
    }
}

请注意,如果yuu显式定义了接受一个或多个参数的A的公共构造函数,则默认的无参数构造函数不再可用...因此您必须将字符串传递给A构造函数,如果您不想在控制台中看到错误。或者,您必须重写A类,以便它实现默认的无参数编译器,例如:

public class A
{
    private reandonly String _var;

    public A() : this(String.Empty) { }

    public A(String var)
    {
        _var = var;
    }
}

根据OP评论和问题更改进行编辑

public class A
{
    private reandonly String _var;

    public String Var
    {
        get { return _var; }
    }

    public A(String var)
    {
        _var = var;
    }
}

public static class B
{
    public static void DoSomething(String text)
    {
        Console.Writeline(text);
    }
}

public class C
{
    public static void Main(string args[])
    {
        A a = new A("name");
        B.DoSomething(a.Var);
    }
}