C#使一切都像C+中那样遵循公共/私人的原则+;? 我最近开始学习C语言,但我有一些C++背景。 我想知道我会怎么做 class employee { public: .... ... methods ... .... private: .... ... private member variables .... .... }

C#使一切都像C+中那样遵循公共/私人的原则+;? 我最近开始学习C语言,但我有一些C++背景。 我想知道我会怎么做 class employee { public: .... ... methods ... .... private: .... ... private member variables .... .... },c#,subclass,private,public,C#,Subclass,Private,Public,我试着在C#中这样做,但它不喜欢“public:…”和“private:…”将后面的所有内容都设置为public或private 另外,我看到C#中有一个get和set的东西,所以你不需要做一些事情,比如生成一个私有成员变量,然后生成一个函数来返回这个变量 当我这么做的时候,如何在C#中创建子类?在C#中,新类会在不同的选项卡中打开,因此我不知道该如何操作 不,你不能。在C#中,必须为每个成员指定访问器 不,您不需要,它被称为Property 在别的班上写 不能像C++中的C那样把“块”公

我试着在C#中这样做,但它不喜欢“public:…”和“private:…”将后面的所有内容都设置为public或private

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

当我这么做的时候,如何在C#中创建子类?在C#中,新类会在不同的选项卡中打开,因此我不知道该如何操作

  • 不,你不能。在C#中,必须为每个成员指定访问器

  • 不,您不需要,它被称为
    Property

  • 在别的班上写

  • 不能像C++中的C那样把“块”公开或私有化,你必须把可见性(和实现)添加到每个成员中。在C++中,通常是这样做的;p>

    public:
      memberA();
      memberB();
    private:
      memberC();
    
    …并在其他地方实现您的成员,而在C#中,您需要这样做

    public  memberA() { ...implement your function here... }
    public  memberB() { ...implement your function here... }
    private memberC() { ...implement your function here... }
    
    至于属性,请将它们视为自动实现的
    set
    get
    方法,您可以选择自己实现或让编译器实现它们。如果你想自己实现它们,你仍然需要这个字段来存储你的数据,如果你把它留给编译器,它也会生成这个字段

    继承与完全相同的文件(即使对于较大的C++项目来说,这可能不是一个好主意)也完全相同。像往常一样继承,只要您在同一个名称空间中或导入了基类的名称空间,就可以无缝地继承

    using System.Collections;  // Where IEnumerable is defined
    
    public class MyEnumerable : IEnumerable {  // Just inherit like it 
       ...                                     // was in the same file.
    }
    
    在C#中,必须为每个方法或属性指定访问说明符。 如果不指定,则使用默认的访问说明符。
    类成员的默认访问说明符是私有的,而类外部的默认访问说明符是内部的

    class MyClass{ //MyClass will be internal
         int MyProperty {get; set;} // MyProperty will be privare
    }
    

    1)C语言中的访问修饰符不同于C++,需要显式指定每个类成员。

    2) 您提到的get、set指的是C#Properties:

    class User
    {
        private string userName;
    
        public string UserName
        {
            get { return this.userName; }
            set { this.userName = value; }
        }
    }
    
    请注意,您也可以使用自动实现的属性

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

    class Manager : Employee 
    {
        //implementation goes here as usual
    }
    

    这确实是一种在堆栈溢出时同时回答许多问题的方法。看来你读一本关于C的书会受益更多。我还建议阅读SO FAQ()和这3:这不是一个子类,这是一个嵌套类。+1,但请注意,您不需要显式指定可访问性;有一个默认的可访问性。当然,任何显式可访问性修饰符都只适用于一个类型成员(或一个类型)。是的,这是完全正确的“内部”是类和结构(如果未明确定义)的默认访问级别。而对于类成员:“通常,成员的可访问性不大于包含它的类型的可访问性。”可以看出,类成员的默认可访问性是
    private
    ;引文所说的有些微不同:如果您给成员提供了比其包含类更大的可访问性,则包含类的更严格的可访问性通常会阻止在无法访问该类的上下文中访问该成员。换句话说,给定
    内部类C{public string P{get;set;}}
    P
    通常不会在程序集外部可见。但是,对于
    内部类C{private string P{get;set;}}
    (或
    内部类C{string P{get;set;}
    ,这是等效的),
    P
    对类外的代码不可见
    C
    。即使
    C
    是公共的,
    P
    的默认可访问性也是私有的。我很高兴你回答了这个问题,尽管这个问题“不是真正的问题”。我一直在看C++代码,没有意识到你不能在C语言中进行块设置。帮我节省了很多谷歌搜索的时间!
    class Manager : Employee 
    {
        //implementation goes here as usual
    }