【发布时间】:2011-07-16 19:48:19
【问题描述】:
子类“caesar”的构造函数报错。它说名称,类型由于其保护级别而无法访问。怎么会?由于这是从“密码”类派生的子类,因此不应给出这样的错误。我该如何克服这种情况。但我希望这些变量是私有的。我不想将它们更改为公开。
***第二个代码示例有效。有人能看出区别吗?
namespace Encrypter
{
class Cipher
{
public Cipher(string name, string type)
{
setName(name);
setType(type);
}
private string name;
private string type;
public void setName(string newName)
{
name = newName;
}
public string getName()
{
return name;
}
public void setType(string newType)
{
type = newType;
}
public string getType()
{
return type;
}
public string encrypt(string text)
{
return text;
}
public string decrypt(string text)
{
return text;
}
}
}
namespace Encrypter
{
class Caesar : Cipher
{
private int shiftamount;
private string shiftdirection;
public Caesar(int shiftamount, string shiftdirection) : base(name, type)
{
setShiftamount(shiftamount);
setShiftdirection(shiftdirection);
}
public void setShiftamount(int newShiftamount)
{
shiftamount = newShiftamount;
}
public int getShiftamount()
{
return shiftamount;
}
public void setShiftdirection(string newShiftdirection)
{
shiftdirection = newShiftdirection;
}
public string getShiftdirection()
{
return shiftdirection;
}
}
}
------------------------------ 新编辑 ----------------
class MyFile
{
public MyFile(int id, string name, int size, string type)
{
setId(id);
setName(name);
setSize(size);
setType(type);
}
private int id;
private string name;
private string type;
private int size;
class Movie : MyFile
{
private string director;
private int release_year;
public Movie(string director, int release_year, int id, string name, int size) : base( id, name, size, "m")
{
setDirector(director);
setRelease_year(release_year);
}
【问题讨论】:
-
啊!您正在使用 C#...使用属性而不是 getter/setter 方法。
-
naming guidelines 也可能是海报的好读物。代码看起来很像 Java。 ;-)
-
是的,实际上我的首选语言是 Java,所以我已经习惯了。由于 C# 与 Java 相似,我在 C# 中也使用我的 java 编程习惯 :D 但是无论如何你是对的 :)
标签: c# inheritance encapsulation access-modifiers