C# 构造函数后面接 : this() 含义

目录

一、C#冒号“:”4种定义

二、继承函数的两种用法

1.继承类

2.自己的类


一、C#冒号“:”4种定义

1、表示继承关系

   classA:classB

2、继承构造函数

重载 :this() 对应的构造函数
public ControlsSynchronizer()
{
  //initialize the underlying ArrayList
  m_frameworkControls = new ArrayList();
}

public ControlsSynchronizer(IMapControlDefault mapControl, IPageLayoutControlDefault pageLayoutControl) : this()
{
   //assign the class members
   m_mapControl = mapControl;
   m_pageLayoutControl = pageLayoutControl;
}

有参数的构造函数需要执行无参构造函数中的代码,为了省去重复代码的编写,所以就继承了

3、泛型的时候,用于过滤,

public void C<T>(T value) where T:IDisposable
{
}
表示,T这个形参 必须要实现 IDisposable 这个接口才可以,不是随便乱传。

4、表示系统命名空间

表示系统System命名空间 Global::System.Consol.WriteLine("");

加入你自己也写了一个类,名字叫System,那么就用  MyNamespace.System 来引用

5、三目运算符,若果X>1返回true,小于1返回false

    bool b= x>1?true:false;

二、继承函数的两种用法

1.继承类

父类的构造函数总是在子类之前执行的。既先初始化静态构造函数,后初始化子类构造函数

public class BaseCircle
{
  public BaseCircle()
  {
   Console.WriteLine(" no arguments base constructor!!!");
  }

  public BaseCircle(double arg)
  {
  Console.WriteLine("double arg base constructor!!!");
  }
}

public class SubCircle : BaseCircle 
{
  public SubCircle():base()
  {
    Console.WriteLine("sub class no argument constructor,actually call base constructor 
    !!!");
  }

  public SubCircle(double a):base(a)
  {
    Console.WriteLine("sub class with argument, actually call base double 
    constructor!!!");
  }

  public SubCircle(int k):this(1,2)
  {
    Console.WriteLine("sub class with argument int k, actually call sub class constructor 
    int i & j !!!");
  }

  public SubCircle(int i,int j)
  {
    Console.WriteLine("sub class with int i&j argument!!!!");
   }
}

static void Main(string[] args)
{
  SubCircle s1 = new SubCircle();
  SubCircle s2 = new SubCircle(1.1);
  SubCircle s3 = new SubCircle(1);
}

输出结果:
no arguments base constructor!!!
sub class no argument constructor,actually call base constructor !!!
double arg base constructor!!!
sub class with argument, actually call base double constructor!!!
no arguments base constructor!!!
sub class with int i&j argument!!!!
sub class with argument int k, actually call sub class constructor int i & j !!!

2.自己的类

 public class SocketServer //: TcpListener
 {
        private const int BufferDefaultSize = 8192;

        /// <summary>构造函数</summary>
        /// <param name="ip">本机IP地址</param>
        /// <param name="port">本机端口号</param>
        public SocketServer(string ip, int port)
            : this(ip, port, BufferDefaultSize)
        {

        }

        /// <summary>构造函数</summary>
        /// <param name="ip">本机IP地址</param>
        /// <param name="port">本机端口号</param>
        /// <param name="bufferSize">数据缓冲区大小</param>
        public SocketServer(string ip, int port, int bufferSize)
            :this(new IPEndPoint(IPAddress.Parse(ip), port), bufferSize)
        {
            
        }
}
在调用SocketServer(string ip, int port)时,先调用this(ip, port, BufferDefaultSize)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Frank_Meta

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

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

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

打赏作者

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

抵扣说明:

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

余额充值