9

我最近开始学习 C#,但我有一些 C++ 的背景。我想知道我会怎么做

class employee
{
    public:
       ....
  ... methods ...
       ....

    private:
       ....
    ... private member variables ....
       ....
}

我尝试在 C# 中执行此操作,但它不喜欢使用“public:...”和“private:...”来将其之后的所有内容设为公共或私有。

另外,我已经看到 C# 中有这个 get 和 set 的东西,所以你不需要做一个私有成员变量的事情,然后做一个函数来返回那个变量?

当我在做的时候,如何在 C# 中创建子类?在 C# 中,新类在不同的选项卡中打开,所以我很困惑我将如何做到这一点。

4

4 回答 4

18

您不能像在 C++ 中那样在 C# 中将“块”设为公共或私有,您必须为每个成员添加可见性(和实现)。在 C++ 中,你通常会这样做;

public:
  memberA();
  memberB();
private:
  memberC();

...并在其他地方实现您的成员,而在 C# 中,您需要这样做;

public  memberA() { ...implement your function here... }
public  memberB() { ...implement your function here... }
private memberC() { ...implement your function here... }

至于属性,将它们视为自动实现setget方法,您可以选择自己实现或让编译器实现它们。如果您想自己实现它们,您仍然需要该字段来存储您的数据,如果您将其留给编译器,它也会生成该字段。

继承的工作方式与将内容放在同一个文件中的工作方式完全相同(这对于较大的 C++ 项目甚至可能不是一个好主意)。像往常一样继承,只要在同一个命名空间或者导入了基类的命名空间,就可以无缝继承;

using System.Collections;  // Where IEnumerable is defined

public class MyEnumerable : IEnumerable {  // Just inherit like it 
   ...                                     // was in the same file.
}
于 2012-09-07T05:25:17.573 回答
4

1) C# 中的访问修饰符与 C++ 不同,因为您需要为每个类成员显式指定一个。

http://msdn.microsoft.com/en-us/library/wxh6fsc7(v=vs.71).aspx

2)你提到的get,set是指C# Properties:

class User
{
    private string userName;

    public string UserName
    {
        get { return this.userName; }
        set { this.userName = value; }
    }
}

请注意,您还可以使用自动实现的属性http://msdn.microsoft.com/en-us/library/bb384054.aspx

3) C# 中的子类化是这样完成的

class Manager : Employee 
{
    //implementation goes here as usual
}
于 2012-09-07T05:39:39.830 回答
3

在 C# 中,您必须为每个方法或属性指定访问说明符。如果您未指定,则使用默认访问说明符。
类成员的默认访问说明符是私有的,类外部的默认访问说明符是内部的

class MyClass{ //MyClass will be internal
     int MyProperty {get; set;} // MyProperty will be privare
}
于 2012-09-07T05:30:15.583 回答
3
  1. 不,你不能。在 C# 中,您必须为每个成员指定访问器。

  2. 不,你没有,它被称为Property

  3. 写其他类

class SomeClass
{

}
class SubClass:SomeClass {}
于 2012-09-07T05:21:40.627 回答