Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用没有返回类型的方法而不将其公开?_C#_Oop_Class_Methods - Fatal编程技术网

C# 如何使用没有返回类型的方法而不将其公开?

C# 如何使用没有返回类型的方法而不将其公开?,c#,oop,class,methods,C#,Oop,Class,Methods,我有一个类,它包含一个有两个参数的方法。我使用属性来设置这些参数的值,但我不知道如何将它们传递给方法。类名是ZipLoad private string user1; private string pass1; public string setUser { set { user1 = value ; } } public string setPass { set { pass1 = value; }

我有一个类,它包含一个有两个参数的方法。我使用属性来设置这些参数的值,但我不知道如何将它们传递给方法。类名是ZipLoad

    private string user1;
    private string pass1;

    public string setUser
    {
        set { user1 = value ; }
    }
    public string setPass
    {
        set { pass1 = value; }
    }

    private void DOit(string uName, string pWord)
    {
      Do some stuff...
    }
我有这个代码初始化它和所有

    ZipLoad myZipLoad = new ZipLoad();
    myZipLoad.setUser = "abc";  // can be anything !
    myZipLoad.setUser = "abc123";
接下来我该怎么做才能使用该方法

谢谢。

这个怎么样:

public ZipLoad(string uName,string pWord)
{
user1= uName;
pass1=pWord;
DOit(uName,pWord);
}
private string user1;
private string pass1;

private void DOit(string uName, string pWord)
{
  Do some stuff...
}
那你可以打电话过来

ZipLoad myZipLoad = new ZipLoad("name","pw");

当您通过属性设置方法中使用的值时,无需再次将它们传递给方法

但是,如果这些变量只在方法中使用(并且不需要存储在ZipLoad类中),则删除属性并使用以下内容:

myZipLoad.DOit("abc", "abc123");

您必须将
DOit
方法公开。

您需要将方法
公开
,并且您不需要将用户名和密码传递给方法,您只需在方法中使用它们即可

public void DOit()
    {
       //you can reach your parameters from here...
    }
所以你可以这样使用:

    ZipLoad myZipLoad = new ZipLoad();
    myZipLoad.setUser = "abc";  // can be anything !
    myZipLoad.setUser = "abc123";
    myZipLoad.DOit();

不太清楚WAE
DOit
方法是什么,但如果它在
ZipLoad
中,出于某种原因,您可以只使用字段,因为属性只有

因此:

但我要做的是在内部使用属性,所以定义它们如下:

public string setUser
{        
    get {return user1}
}
public string setPass
{
    get{ returnpass1 ; }
}
并从类的ctor中设置字段的值,考虑到这些是属性
为了能够使用一个对象(至少我从提供的代码中了解到了这一点)

使用访问修饰符的最基本原则是要设置什么级别的权限。使用私有意味着它是最低访问级别。那么,你为什么要设计一些私密的东西,并想作为公共使用呢。而是使用公共的

有关可访问性级别,请参阅MSDN:


如果您有要设置
user1
pass1
的属性,并且您的
DOit
方法设置为
private
,则实际上不需要向此方法传递参数

您只需初始化
ZipLoad
对象:

ZipLoad myZipLoad = new ZipLoad();
myZipLoad.setUser = "abc";  // can be anything !
myZipLoad.setPass = "abc123";
正如您已经做的,然后在
DOit
方法中使用属性值。因此,无需参数即可重新定义该方法:

private void DOit()
{
    Do some stuff...
}

这里似乎有很多混乱。如果我没弄错的话,你有两个选择,取决于你想做什么

如果您可以更改方法签名,您可以执行以下操作:

private string user1;
private string pass1;

public string setUser
{
    set { user1 = value ; }
}
public string setPass
{
    set { pass1 = value; }
}

private void DOit() // Note: No parameters here!
{  
    // use setUser and setPass directly here, like:
    var user = setUser;
    Do some stuff...
}
如果您无法更改方法签名,并且出于某种原因(可能出于测试目的,或者出于其他原因?)绝对希望将值作为参数传递,那么重载可能是一个选项:

private string user1;
private string pass1;

public string setUser
{
    set { user1 = value ; }
}
public string setPass
{
    set { pass1 = value; }
}

// New method, just to call the other one:
private void DOit() 
{  
    // Just call the original method, with 
    // the properties as parameters:
    DOit(setUser, setPass);
}

// Your original method:
private void DOit(string uName, string pWord) 
{  
    Do some stuff...
}

不知道如何将它们传递给方法
传递给哪个方法?我不明白这个问题。。。如果您指的是
Doit
方法,那么您不需要将它们作为参数传递,您可以直接访问它们。如果您希望能够从类外调用该方法,为什么要将其声明为私有?您的问题非常不清楚。您何时尝试调用该方法,这与公开有什么关系?为什么你的属性命名如此奇怪?你应该看看.NetI中的属性是如何命名的。我不希望DOit方法是公共的。我想使用我创建的属性设置用户名和密码。我想将在这些属性中设置的值提供给DOit方法。希望这会清除一些东西…您忘记传递参数,这将导致编译器错误。谢谢@Janesabouchleihi如果我这样做,是否有必要让字符串user1,pass1?哦,现在我明白了。非常感谢你。现在我明白大家在说什么了。万分感谢。@WaqasAli:)你很好,我已经照你说的做了,现在我该如何调用DOit()方法@由于WaqasAli是一个私有方法,因此只能由
ZipLoad
类中的另一个方法调用它。它可以是一个公共方法,也可以是另一个私有方法……所以你的意思是我必须创建一个公共方法来调用私有方法?是的,我可以更改方法签名,但该方法仍然是私有的。那我怎么称呼呢?我想我可能误解了你的问题。我认为该方法是从类中的其他地方调用的(在这种情况下,它可以是私有的)。如果要从类外部调用该方法,它必须是公共的(或者可能是受保护的)。否则,您必须从类内调用它,例如从不带参数的
DOit()
方法调用,但该方法必须是公共的。然后是最后一个选项,即从构造函数内部调用它(如Cloudsan Chen提供的答案所示)。好的,谢谢您的帮助
private string user1;
private string pass1;

public string setUser
{
    set { user1 = value ; }
}
public string setPass
{
    set { pass1 = value; }
}

// New method, just to call the other one:
private void DOit() 
{  
    // Just call the original method, with 
    // the properties as parameters:
    DOit(setUser, setPass);
}

// Your original method:
private void DOit(string uName, string pWord) 
{  
    Do some stuff...
}