C#基础知识整理:C#类和结构(2)

  1、什么是构造函数? 有哪些构造函数? 各个构造函数的定义、实现方法、注意事项?
所谓构造函数,就是一个方法,这个方法可以初始化对象,即运行完这个函数后,内存总开辟了一块该类的对象的空间。有三种:正常的构造函数,也就是实例化构造函数;私有构造函数;静态构造函数。
实例化构造器:

    public class Example      {          private string property1 = string.Empty;            private string property2 = @"hello";            private int property3 = 0;            public Example()//成员都是声明时的初始值,这种默认的构造器,也可以不写。          {            }            public Example(string p1, string p2, int p3)//传入的值初始化          {              this.property1 = p1;                this.property2 = p2;                this.property3 = p3;          }      }  

私有构造器:
私有构造器,外部是不能访问的,那么如何实例化呢,参见单例模式,这里就是用了私有构造函数:

http://blog.csdn.net/yysyangyangyangshan/article/details/6962657

静态构造函数:
先看例子:

 public class StaticConstruct      {          static StaticConstruct()          {              Console.WriteLine(@"静态构造函数");          }            public StaticConstruct()          {              Console.WriteLine(@"实例化构造函数");          }            public StaticConstruct(string flage)          {              Console.WriteLine(@"带参构造函数");          }      }        class Program      {          static void Main(string[] args)          {              StaticConstruct strc = new StaticConstruct();                StaticConstruct strcValue = new StaticConstruct(string.Empty);                Console.ReadLine();          }      }

  结果:
   
    静态构造函数特点:静态构造函数中不允许出现访问修饰符;实例化的时候,首先自动调用静态构造函数,意即调用静态构造函数是不可控的;静态构造函数是无参的,并且一个类中只有一个;不能被继承。
  2、This关键字和Base关键字用途? 实现代码?
(1)、this关键字:
 this顾名思义,就是指本类中的意思,引用当前类的成员。当然如果程序在运行中,则可以精确地说,this指当前类的对象的成员,作用就是用来区分对象的。因为一个类可以有N个对象。不过在static类中不能使用this关键字,究其原因,无非是static不可能实例化多个对象,它只有一个,自然没必要去用this来区分对象了。一般常用如下:
 a、方法或构造函数中,同名变量。

     public class MyTestA      {          private string testA = string.Empty;            public MyTestA(string testA)          {              this.testA = testA;          }            public void Handler(string testA)          {              this.testA = testA;          }      }

b、get,set方法

    public class MyTestB      {          private string testB = string.Empty;            public string TestB          {              get               {                   return this.testB;              }              set               {                   this.testB = value;              }          }      }

c、将实例传递
比如,事件中

    public class MyTestC      {          public event EventHandler OnTestCEvent = null;            private void Send_OntestEvent(object sender,EventArgs e)          {              if (OnTestCEvent != null)              {                  OnTestCEvent(sender, e);              }          }            private void TestEvent()          {              Send_OntestEvent(this, null);          }      }        public class MyTestD      {          MyTestC testC = new MyTestC();            public event EventHandler OnTestDEvent = null;            private void Send_OnTestDEvent(object sender, EventArgs e)          {              if (OnTestDEvent != null)              {                  OnTestDEvent(sender, e);              }          }            public MyTestD()          {              testC.OnTestCEvent += new EventHandler(testC_OnTestEvent);          }            void testC_OnTestEvent(object sender, EventArgs e)          {              Send_OnTestDEvent(sender, e);          }      }        public class MyTestE      {          MyTestD testD = new MyTestD();            public MyTestE()          {              this.testD.OnTestDEvent += new EventHandler(testD_OnTestDEvent);          }            void testD_OnTestDEvent(object sender, EventArgs e)          {              MyTestC testC = sender as MyTestC;//通过MytestD将对象转了过来                if (testC != null)              {                  //代码              }          }      }

(2)base关键字:
一般用于,子类访问父类。
一种是,重写父类方法时,

    public class ParentClass      {          public virtual void MethodA()          {              Console.WriteLine(@"基类的方法");          }      }        public class ChildClass : ParentClass      {          public override void MethodA()          {              base.MethodA();                Console.WriteLine("派生类方法");          }      }

另一种,子类调用父类构造函数,

    public class ParentClass      {          public ParentClass(string flage)          {              Console.WriteLine(@"基类构造函数");          }            public virtual void MethodA()          {              Console.WriteLine(@"基类的方法");          }      }        public class ChildClass : ParentClass      {          public ChildClass(string flage)                : base(flage)          {            }            public override void MethodA()          {              base.MethodA();                Console.WriteLine("派生类方法");          }      }

  3、什么是反射? 如何实现反射? 反射有何优缺点? 何时使用反射?
http://blog.csdn.net/yysyangyangyangshan/article/details/7028589

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值