如何在同一个类的方法中设置参数

时间:2017-09-12 09:04:17

标签: c#

  Main()
   {
    bool flag = false;
    ClassA obj = new ClassA(out flag);

    if(flag==true)
    {
        //do smething
    }
}

ClassA
{
    ClassA(out bool flag)
    {
       flag = false;      
    }
    private void SomeClickEvent()
    {
         flag = true;
    }
}

我将bool值传递给构造函数。需要在SomeClickMethod()设置值相同的值将作为out参数返回我该怎么办?

3 个答案:

答案 0 :(得分:1)

值类型按值传递。如果你想在你的类中保留一个引用并在另一个方法中修改它并查看反映到外部的更改,要么公开一个属性,要么引入一个容器类,它将通过引用传递。

所以要么公开一个属性:

        bool success = ThreadPool.SetMinThreads(workerThreads: 2000, completionPortThreads: 1000);
        success = ThreadPool.SetMaxThreads(2000, 2000);
        DateTime dt = DateTime.UtcNow;
        Parallel.For(0, 1000, (num) =>
        {
            string url = "https://www.google.co.il/?gfe_rd=cr&dcr=0&ei=OZy3WcmoMY7b8Affj4F4&gws_rd=ssl";
            using (WebClient web = new WebClient())
            {
                byte[] bytes = web.DownloadData(url);
            }
        }
        );
        double sec = (DateTime.UtcNow - dt).TotalSeconds;
        Console.WriteLine(sec);

你这样称呼它:

public class Foo
{
    public bool SomeValue { get; }

    public Foo(bool someValue)
    {
        SomeValue = someValue;
    }

    public void Foo2()
    {
        SomeValue = true;
    }
}

或者创建一个容器来保存值:

bool flag = false;
var obj = new Foo(flag);
// ...
flag = obj.SomeValue;

你这样称呼它:

public class BoolContainer
{
    public bool SomeValue { get; set; }
}

public class Foo
{
    private BoolContainer _boolContainer;

    public Foo(BoolContainer boolContainer)
    {
        _boolContainer = boolContainer;
    }

    public void Foo2()
    {
        _boolContainer.SomeValue = true;
    }
}

现在调用者可以访问var boolContainer = new BoolContainer(); var obj = new Foo(boolContainer); // ... bool flag = boolContainer.SomeValue; 来检查(或更改)值。

答案 1 :(得分:1)

虽然您可以在较新版本的C#中返回引用,但您无法存储它们。类中的字段不能作为引用。您有几种方法可以解决此问题 - 将flag变量转换为类'字段,或将setter lambda传递给构造函数:

public class ClassA
{
    public bool flag{get; private set;}

    private void SomeClickMethod()
    {
        flag = true;
    }
}

或者:

public class ClassA
{
    readonly Action<bool> setter;

    public ClassA(Action<bool> setter)
    {
        this.setter = setter;
        setter(false);
    }

    private void SomeClickMethod()
    {
        setter(true);
    }
}

bool flag = false;
ClassA obj = new ClassA(b => flag = b);

答案 2 :(得分:1)

假设您只是意味着如何存储和返回一个值(这是我从您的代码中理解的):

ClassA
{
    bool flag1;
    ClassA(bool flag)
    {
       flag1 = flag;      
    }
    public bool SomeClickEvent()
    {
         return flag1;
    }
}

并使用它:

ClassA a = new ClassA(true);
bool b = a.SomeClickEvent();//returns true.