C#学习——1.类及成员定义

一.类的定义
1.1类的访问修饰符
修饰符含义
无或internal只能在当前项目中访问类
public可以在任何地方访问类
abstract或internal abstract只能在当前项目中访问,不能实例化,只能被继承
public abstract可以在任何地方访问,不能实例化,只能被继承
sealed或internal sealed只能在当前项目访问,只能被实例化,不能被继承
public sealed可以在任何地方访问,只能实例化,不能被继承
1.2普通类
public class MyClass
{
}
1.3抽象类
public abstract class MyClass
{
}
1.4密封类
public sealed class MyClass
{
}
1.5嵌套类
public sealed class MyClass
{
   public class MyNestedClass
   {
     public int NestedClassField;
   }
}

要在MyClass外部实例化MyNestedClass,必须限定名称,例如:

MyClass.MyNestedClass myObj = new MyClass.MyNestedClass();
1.6泛型类
class MyClass<T>
{
}
1.7类的继承
public class MyClass:MyBase, IFlyable
{
}

类支持的接口必须放在基类(如果有)后面,用逗号隔开。

二.类成员的定义

类的成员包括字段方法属性。所有成员都有自己的访问级别,用下面关键字定义:

关键字含义
public成员可以由任何代码访问
private成员只能由类中的代码访问(如果没有指定任何关键字,默认为此关键字)
internal成员只能由定义它的程序集(项目)内部的代码访问
protected成员只能由类或派生类中的代码访问
2.1定义字段
class MyClass
{
  public int Myint;
}

字段也可以使用关键字readonly,表示该字段只能在执行构造函数的过程中赋值,或由初始化赋值语句赋值。例如:

class MyClass
{
  public readonly int Myint = 17;
}

也可以使用static关键字将字段声明为静态,例如:

class MyClass
{
  public static int Myint;
}

静态字段必须有类访问,不能通过类的对象实例来访问。

2.2定义方法

方法和定义函数格式相同,在前面加上访问修饰符。

class MyClass
{
  public string GetString()
  {
     return "hello";
  }
}
关键字含义
virtual方法可以重写
abstract方法必须在非抽象的派生类中重写(只用于抽象类)
override重写基类方法
extern方法定义可以放在项目外部其他地方
static方法只能通过类访问,不能通过对象实例访问

如果使用override,也可以使用sealed指定派生类不能再对该方法进行修改,不能被再次重写。

class MyClass:MyBaseClass
{
  public override sealed void DoSomething()
  { 
  }
}
2.3定义属性

属性与字段差不多,但增加了两个类似函数的访问器:getset,一个用于获取属性的值,一个用于设置属性的值。两个属性至少得有一个,属性才有效。属性本质是一个方法,本身不存储数据,主要用来操作私有字段,或者限定属性只读或只写,还进行一些其他操作(避免出现非法数据)。下面定义了一个Name属性,同时限制Name不能为“张三”。

class MyClass
{
  //字段
  private string _name=string.Empty;
  //属性
  public string Name
  { 
    get
    {
      return _name;
    }
    set
    {
       if(value!="张三")
       { 
             _name= value;
       }
       else
       {
            _name= string.Empty;
       }
    }
}

属性可以像方法一样使用virtual、override和abstract关键字,例如:

class MyClass
{
  //字段
  private string _name=string.Empty;
  //属性
  public string Name
  { 
    get
    {
       return _name;
    }
    protected set
    {
       _name= value;
    }
  }
 }

只有类或派生类中的代码才可以使用set访问器。要注意的是,访问器的可访问性级别不能高于它所在属性的访问级别。就是说私有属性的访问器不能包含任何访问修饰符,而公共属性才可以对两个访问器进行访问级别设置。
除了上述方式定义属性外,可以以C#提供了另外简洁方式定义属性,通过一个公共属性来直接访问一个私有成员,即自动属性。自动属性可以简化语法,编译器会自动声明私有字段,并在属性的get和set块使用该字段。自动属性只能通过属性访问数据,不能通过底层的私有字段访问,不过限制是必须包含get和set访问器,但可以改变访问级别。

class MyClass
{
  public int Age
  { 
    get;
    private set;
  }
}
2.4定义索引器
class Person
{       
    private string[] _cars = new string[5];  
    //索引器,一个特殊的属性(方法)
    public string this[int index]
    {
         get
         {
             if (index < 0 || index >= _cars .Length)
             {
                 throw new ArgumentException();  
             }
             return _cars [index];
          }
          set
          {
             _cars [index] = value;
          }
   }
}

通过索引器可以操作类的实例中的数组成员,使用方法与数组类似,形式如下:对象名[索引]

Person  p=new Person();  
p[0]="奥迪";  
Console.WriteLine(p[0]); 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爬虫与地理信息

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值