C# 如何使用没有返回类型的方法而不将其公开?
我有一个类,它包含一个有两个参数的方法。我使用属性来设置这些参数的值,但我不知道如何将它们传递给方法。类名是ZipLoadC# 如何使用没有返回类型的方法而不将其公开?,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; }
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...
}