在C#中使用"类"

Hoq*_*que 9 c#

在ASP.net学习C#时,我无法理解几个类.在哪种情况下我应该使用以下类private,public,protected,abstract,static,sealed

如果有人可以用简单的例子来解释这些,那会更好.

Joh*_*ers 19

那些不是课程.

private,protected并且public是访问修饰符.它们指示哪些其他代码可以看到它们影响的代码:

public class Foo
{
    private int _myOwn = 1;
    protected int _mineAndChildren = 2;
    public int _everyOnes = 3;
}

public class Bar : Foo
{
    public void Method()
    {
        _myOwn = 2; // Illegal - can't access private member
        _mineAndChildren = 3; // Works
        _everyOnes = 4; // Works
    }
}

public class Unrelated
{
    public void Method()
    {
        Foo instance = new Foo();
        instance._myOwn = 2; // Illegal - can't access private member
        instance._mineAndChildren = 3; // Illegal
        instance._everyOnes = 4; // Works
    }
}
Run Code Online (Sandbox Code Playgroud)

abstract类是一个可能包含abstract成员.一个abstract成员没有实施,使所有派生类必须实现的abstract成员.

一个sealed类不能被继承.一个static类是sealed,但也只能包含static成员.

我建议你从" Visual C#入门"开始.这是一个非常基本的问题.


Elt*_*iel 8

public,privateprotected不是类,它们是访问修饰符.它们改变了允许访问用它们装饰的类的内容.它们适用于类以及类的成员.

  • public 物品可以在任何地方看到
  • private 只能在同一个文件中看到类
  • private 只能在该类中看到类的成员
  • protected成员在类及其后代中可见
  • internal 类在同一程序集中是公共的.

所述abstract关键字标志着一个类或方法为具有没有实现,并且它必须被覆盖(用override在派生类型关键字),然后才能使用它.

一个sealed类不能继承.

static在类成员上使用关键字表示该成员属于该类本身,而不是它的特定实例.将类标记为static强加了此类的所有成员也必须具有的限制static.

  • +1是一个很好的答案,尖锐而且重要.请注意static关键字...如果在ASP.NET Web应用程序中将变量声明为静态,则应用程序的每个用户都将使用相同的变量!...因此,将用户名/密码(敏感数据)存储在静态变量中是非常不明智的,因为其他用户也可以查看数据! (3认同)

Joe*_*win 5

private,publicprotected指出谁可以访问类的成员.私人意味着班上没有人能看到它.公众意味着每个人都可以看到它 protected就像私有一样,但是子类可以访问它.

class Data
{
    private int counter; // only accessible to class functions
    protected int id;    // accessible to class and subclass functions
    public string name;  // accessible from all code
}
Run Code Online (Sandbox Code Playgroud)

abstract意味着这不是一个完成的类 - 它意味着用作子类的基础.通常在其定义中存在虚函数,函数旨在由子类"填充".

abstract class Window
{
    // cannot create objects of this class directly
    // need to create sub class
}
Run Code Online (Sandbox Code Playgroud)

static在类定义上意味着只有一个全局副本.它几乎将类恢复为旧式模块.static对某个成员表示它是该类中的全局成员,对于您为该类创建的每个对象都没有不同的版本.

static class Configuration
{
    // only one instance of the object
}

class Data
{
    private static int counter; // all Data objects access this one counter
    private int id;             // each Data object has a different id
}
Run Code Online (Sandbox Code Playgroud)

sealed防止创建子类; 它也可以应用于单个函数,以防止它们在子类中被覆盖.

sealed class TelephoneNumber
{
    // cannot create subclass of TelephoneNumber
}

class Address
{
    public sealed string FormatAddress()
    {
        // this function cannot be overridden on a subclass
    }
}
Run Code Online (Sandbox Code Playgroud)