Reflection
The reflection mechanism is in the running state. For any class, it can know all the attributes and properties of the class. Method; for any object, any of its methods can be called; this function of dynamically obtaining and dynamically calling the object's methods is called the reflection mechanism. The reflection mechanism dynamically obtains methods and uses them, which is completely different from directly creating an object of a class and calling it directly. For example, if there is a property or method in a class that is private, we cannot call it directly, but we can use the reflection mechanism to call it dynamically.
IOC
## The biggest benefit of IOC is that object generation is It is defined in XML, so when we need to change an implementation subclass, it will become very simple (generally such objects are implemented in some kind of interface), just modify the XML, so that we can even realize the hotness of the object. Plug and unplug (a bit like USB interface and SCSI hard drive). Before IOC is not applicable, if an object depends on another object (hereinafter we will refer to it as the dependent object and the dependent object), we must instantiate a dependent object in the dependent object so that the methods in the dependent object can be called. Obviously, this degree of coupling is relatively high and does not conform to our programming principles. Therefore, at this time we will introduce a third-party object, which is responsible for directly delivering a dependent object to the dependent object, reducing the coupling between the two. The following figure shows the comparison of object coupling in the system before and after adding the IOC container
## Before the IOC container was introduced in the software system, as shown in Figure 1, object A depends on object B. Then object A must actively create it when it is initialized or runs to a certain point. Object B or use an already created object B. Whether you are creating or using object B, the control is in your hands. After the IOC container was introduced into the software system, this situation completely changed. As shown in Figure 2, due to the addition of the IOC container, the direct connection between object A and object B was lost. Therefore, when object A runs to When object B is needed, the IOC container will actively create an object B and inject it into the location where object A is needed. Through the comparison before and after, it is not difficult to see that the process of object A becoming dependent on object B changes from active behavior to passive behavior, and the control rights are reversed. This is the origin of the name "inversion of control".
Instance
##Reflection instance code<span style="font-family:KaiTi_GB2312;font-size:18px;color:#666666;"><strong>using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace StudentDAL { public class Student { //属性 public string Name{get;set;} public int Age { get; set; } //无参数构造函数 public Student() { this.Name = "无参数"; this.Age = 0; } //有参数构造函数 public Student(string name, int age) { this.Name = "name"; this.Age = age; } //public带参带返回值函数 public string PublishMethodReturn() { return string.Format("我叫"+Name+"年龄" +Age); } } }</strong></span>rrree
##IOC example code
#
<span style="max-width:90%"><strong>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
namespace ITOO_Reflection
{
class Program
{
static void Main(string[] args)
{
//使用 Assembly 定义和加载程序集,
//加载在程序集清单中列出的模块,
//以及从此程序集中查找类型并创建该类型的实例.
//获取程序集
Assembly assembly = Assembly.Load("StudentDAL");
//从程序及获取指定对象类型
Type type = assembly.GetType("StudentDAL.Student");
var instance = assembly.CreateInstance("StudentDAL.Student");
//为学生类的属性赋值
type.GetProperty("Name").SetValue(instance, "shx", null);
type.GetProperty("Age").SetValue(instance, 18, null);
//获取Student类的方法
var method = type.GetMethod("PublishMethodReturn");
//调用Student类的成员方法PublishMethodReturn
var S= method.Invoke(instance, null);
Console.WriteLine(S);
Console.Read();
}
}
}</strong></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#666666;"><strong>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ITOO.IOC.IDAL
{
public interface IUserDal
{
void HelloWord();
}
}
</strong></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#666666;"><strong>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ITOO.IOC.IDAL;
namespace ITOO.IOC.DAL
{
public class User:IUserDal
{
public void HelloWord()
{
Console.WriteLine("helloword");
}
}
}
</strong></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#666666;"><strong>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ITOO.IOC.IBLL
{
public interface IUserBll
{
void HelloWord();
}
}
</strong></span>
<span style="font-family:KaiTi_GB2312;font-size:18px;color:#666666;"><strong>using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ITOO.IOC.IBLL;
using ITOO.IOC.IDAL;
using ITOO.Library.Core.AOP;
namespace ITOO.IOC.BLL
{
public class UserBll:IUserBll
{
public void HelloWord()
{
//使用底层封装的SpringHelper从IOC容器中拿到D层的类的对象实例
IUserDal iuser = SpringHelper.GetObject<IUserDal>("User");
iuser.HelloWord();
}
}
}
</strong></span>
operation result

The relationship between C# and .NET is inseparable, but they are not the same thing. C# is a programming language, while .NET is a development platform. C# is used to write code, compile into .NET's intermediate language (IL), and executed by the .NET runtime (CLR).

C#.NET is still important because it provides powerful tools and libraries that support multiple application development. 1) C# combines .NET framework to make development efficient and convenient. 2) C#'s type safety and garbage collection mechanism enhance its advantages. 3) .NET provides a cross-platform running environment and rich APIs, improving development flexibility.

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

C# and .NET adapt to the needs of emerging technologies through continuous updates and optimizations. 1) C# 9.0 and .NET5 introduce record type and performance optimization. 2) .NETCore enhances cloud native and containerized support. 3) ASP.NETCore integrates with modern web technologies. 4) ML.NET supports machine learning and artificial intelligence. 5) Asynchronous programming and best practices improve performance.

C#.NETissuitableforenterprise-levelapplicationswithintheMicrosoftecosystemduetoitsstrongtyping,richlibraries,androbustperformance.However,itmaynotbeidealforcross-platformdevelopmentorwhenrawspeediscritical,wherelanguageslikeRustorGomightbepreferable.

The programming process of C# in .NET includes the following steps: 1) writing C# code, 2) compiling into an intermediate language (IL), and 3) executing by the .NET runtime (CLR). The advantages of C# in .NET are its modern syntax, powerful type system and tight integration with the .NET framework, suitable for various development scenarios from desktop applications to web services.

C# is a modern, object-oriented programming language developed by Microsoft and as part of the .NET framework. 1.C# supports object-oriented programming (OOP), including encapsulation, inheritance and polymorphism. 2. Asynchronous programming in C# is implemented through async and await keywords to improve application responsiveness. 3. Use LINQ to process data collections concisely. 4. Common errors include null reference exceptions and index out-of-range exceptions. Debugging skills include using a debugger and exception handling. 5. Performance optimization includes using StringBuilder and avoiding unnecessary packing and unboxing.

Testing strategies for C#.NET applications include unit testing, integration testing, and end-to-end testing. 1. Unit testing ensures that the minimum unit of the code works independently, using the MSTest, NUnit or xUnit framework. 2. Integrated tests verify the functions of multiple units combined, commonly used simulated data and external services. 3. End-to-end testing simulates the user's complete operation process, and Selenium is usually used for automated testing.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

Dreamweaver Mac version
Visual web development tools

Dreamweaver CS6
Visual web development tools