Primitives vs Objects

本文深入解析C#中的primitives(值类型)和objects(引用类型)的区别,通过实例说明变量如何存储数据及函数调用时不同类型的变化。理解C#内存管理的关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里首先我们要了解什么是primitives 和 objects

其实理解起来很简单. 如果我们懂.NET开发就会知道C#中的值类型和引用类型.

primitives

variables containing primitives actually hold that data inside of the variable itself.

primitives 相当于值类型.

 

object

object not actually contain the object. It contain a reference th the place in memory.

object相当于引用类型, 我们只有获得object的指针, 而不是值本身.

 

当我们了解这块之后, 就可以理解primitives  和 object的区别了.

 

B在这里是获取的A的值,重新建立数字. 而不是只获取A的指向.

 

 

这里object2 没有重新建立新object, 而只是引用object1的值

 

function也一样.  object我们使用的是reference 而不是object的值.

Primitives 在function中只是改变了copy的值而不是本身的值

 

转载于:https://www.cnblogs.com/TheMiao/p/9770947.html

import os import re import json from datetime import datetime from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives import padding from cryptography.hazmat.backends import default_backend from binascii import hexlify, unhexlify from rest_framework import parsers, renderers from rest_framework.compat import coreapi, coreschema from rest_framework.response import Response from rest_framework.schemas import ManualSchema from rest_framework.views import APIView from rest_framework.authtoken.models import Token from rest_framework.authtoken.serializers import AuthTokenSerializer from django.contrib import auth from django.http import QueryDict from django.shortcuts import HttpResponse from django.views.generic.base import View from django.contrib.auth.hashers import make_password, check_password from .models import * from case.models import CaseType from users.models import ScoreModel from .utils import send_register_email from fcdaserver.rest_framework.views import ViewBase class UserPermissions(ViewBase): def put(self, request): exam_type = request.data.get("exam_type") user = request.user if user.is_active: user.exam_type = exam_type user.save() response_data = {"code": 0, "msg": ""} else: response_data = {"code": 1, "msg": "用户没有激活!"} return self.json_response(data=response_data) class ResetPwd(ViewBase): def post(self, request): old_word = request.data.get("old_pwd", "") new_pwd = request.data.get("new_pwd", "") user = auth.authenticate(username=request.user.username, password=old_word) if user is not None: if user.is_active: user.set_password(new_pwd) user.save() response_data = {"code": 0, "msg": ""} else: response_data = {"code": 1, "msg": "用户未激活!"} else: response_data = {"code": 1, "msg": "用户名或密码错误!"} return self.json_response(data=response_data) class MyAuthToken(APIView): throttle_classes = () permission_classes = () parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,) renderer_classes = (renderers.JSONRenderer,) serializer_class = AuthTokenSerializer if coreapi is not None and coreschema is not None: schema = ManualSchema( fields=[ coreapi.Field( name="username", required=True, location='form', schema=coreschema.String( title="Username", description="Valid username for authentication", ), ), coreapi.Field( name="password", required=True, location='form', schema=coreschema.String( title="Password", description="Valid password for authentication", ), ), ], encoding="application/json", ) def post(self, request, *args, **kwargs): username = request.data.get("username") password = request.data.get("password") user_obj = UserProfile.objects.filter(username=username).first() if user_obj: if not check_password(password, user_obj.password): return Response({"code": 1, "msg": "密码不正确!"}) if user_obj.sn and user_obj.is_active: current_time = datetime.now().timetuple() active_time = user_obj.sn.active_time.timetuple() if int(time.mktime(current_time)) - int(time.mktime(active_time)) > 60 * 60 * 24 * user_obj.sn.expire_date: user_obj.sn.is_valid = False else: user_obj.sn.is_valid = True user_obj.sn.save() if Token.objects.filter(user=user_obj).exists(): token_key = hexlify(os.urandom(20)).decode() Token.objects.filter(user=user_obj).update(key=token_key, created=datetime.now()) token_info = Token.objects.filter(user=user_obj).first() else: token_info = Token.objects.create(user=user_obj) UserProfile.objects.filter(username=username).update(last_login=datetime.now()) if user_obj.sn.is_valid: return Response({"code": 0, "msg": token_info.key}) else: return Response({"code": 1, "msg": "当前账户已过期!请联系管理员!"}) else: return Response({"code": 1, "msg": "用户未激活!请联系管理员!"}) else: return Response({"code": 1, "msg": "用户不存在!"}) class UserRegister(View): def post(self, request, *args, **kwargs): username = request.POST.get("username", "") nickname = request.POST.get("nickname", "") email = request.POST.get("email", "") password = request.POST.get("password", "") serial_number = request.POST.get("serial_number", "") response_data = {"code": 0, "msg": ""} if username == "": response_data = {"code": 2, "msg": "用户名不允许为空!"} elif nickname == "": response_data = {"code": 2, "msg": "昵称不允许为空!"} elif password == "": response_data = {"code": 2, "msg": "密码不允许为空!"} elif email == "": response_data = {"code": 2, "msg": "邮箱不允许为空!"} elif serial_number == "": response_data = {"code": 2, "msg": "序列号不允许为空!"} if response_data["code"] != 0: return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") if not username.isalnum(): response_data = {"code": 3, "msg": "用户名包含非法字符!"} elif re.match("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", email) == None: response_data = {"code": 3, "msg": "邮箱格式不正确!"} if response_data["code"] != 0: return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") if UserProfile.objects.filter(username=username).exists(): response_data = {"code": 1, "msg": "用户名已存在!"} else: serial_number_obj = SerialNumber.objects.filter(serial_number=serial_number).first() if not serial_number_obj or not serial_number_obj.is_valid: response_data = {"code": 2, "msg": "序列号已经过期!"} else: encrypt_pwd = make_password(password, None, 'pbkdf2_sha256') UserProfile.objects.create(username=username, nick_name=nickname, password=encrypt_pwd, email=email, sn=serial_number_obj, is_active=False) serial_number_obj.active_time = datetime.now() serial_number_obj.save() send_register_email(username, email) response_data = {"code": 0, "msg": ""} return HttpResponse(content=json.dumps(response_data, indent=4,), content_type="application/json;charset=UTF-8") class UserActive(View): def post(self, request): email_code = request.POST.get("email_code", "") response_data = {"code": 0, "msg": ""} if email_code == "": response_data = {"code": 2, "msg": "验证码无效"} if response_data["code"] == 0: email_record_obj = EmailVerifyRecord.objects.filter(code=email_code).first() if email_record_obj: user_obj = UserProfile.objects.filter(username=email_record_obj.username, email=email_record_obj.email).first() user_obj.is_active = True user_obj.save() user_group_obj = UserGroup.objects.get(name="默认组") user_group_obj.user.add(user_obj) response_data = {"code": 0, "msg": "用户已激活"} else: response_data = {"code": 2, "msg": "验证码无效"} return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") class UserAuthentication(View): def get(self, request): username = request.GET.get("username") user_obj = UserProfile.objects.filter(username=username).first() if user_obj: response_data = {"code": 0, "msg": "验证码已发送至您的邮箱,请注意查收!"} send_register_email(username, user_obj.email, send_type="reset_pwd") else: response_data = {"code": 1, "msg": "用户不存在"} return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") def post(self, request): username = request.POST.get("username") password = request.POST.get("password") user_obj = UserProfile.objects.filter(username=username).first() if user_obj: if user_obj.is_active: user_obj.set_password(password) user_obj.save() response_data = {"code": 0, "msg": ""} else: response_data = {"code": 1, "msg": "用户未激活!"} else: response_data = {"code": 1, "msg": "用户名或密码错误!"} return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") def put(self, request): put = QueryDict(request.body) username = put.get("username") email_code = put.get("email_code") email_record_obj = EmailVerifyRecord.objects.filter(username=username, code=email_code).first() if email_record_obj: response_data = {"code": 0, "msg": "验证成功!"} else: response_data = {"code": 1, "msg": "验证失败!"} return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") class EditPersonalInformation(ViewBase): def get(self, request): username = request.GET.get("username") user_obj = UserProfile.objects.filter(username=username).first() if user_obj: temp = { "username": username, "nickname": user_obj.nick_name, "email": user_obj.email, "phone": user_obj.first_name } response_data = {"code": 0, "msg": "", "data": temp} else: response_data = {"code": 1, "msg": "用户名获取失败!"} return self.json_response(data=response_data) def post(self, request): username = request.POST.get("username") nickname = request.POST.get("nickname") email = request.POST.get("email") phone = request.POST.get("phone") user_obj = UserProfile.objects.filter(username=username).first() if user_obj: user_obj.nick_name = nickname user_obj.email = email user_obj.first_name = phone user_obj.save() response_data = {"code": 0, "msg": "修改成功!"} else: response_data = {"code": 1, "msg": "用户名获取失败!"} return self.json_response(data=response_data) class ScoreView(ViewBase): def post(self, request): stage_id = request.POST.get("stageId") question_number = request.POST.get("questionNo") score = request.POST.get("score") try: ScoreModel.objects.create(user=request.user, stage_id=stage_id, question_number=question_number, score=score) return self.json_response(data={"code": 0, "msg": "提交成功!"}) except Exception as e: print(e) return self.json_response(data={"code": -1, "msg": "提交失败!"}) def get_key(key): # 确保密钥是字节串类型 if isinstance(key, str): key = key.encode('utf-8') # 填充或截断密钥以确保长度为 16 字节 key = key.ljust(16, b'\x00')[:16] return key def encode2hex(src, key): try: key = get_key(key) cipher = Cipher(algorithms.AES(key), modes.ECB(), backend=default_backend()) encryptor = cipher.encryptor() padder = padding.PKCS7(algorithms.AES.block_size).padder() padded_data = padder.update(src.encode('utf-8')) + padder.finalize() encrypted = encryptor.update(padded_data) + encryptor.finalize() return hexlify(encrypted).decode('utf-8') except Exception as e: print(f"encode2hex fail: {e}") return None def decode4hex(src, key): try: key = get_key(key) cipher = Cipher(algorithms.AES(key), modes.ECB(), backend=default_backend()) decryptor = cipher.decryptor() unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder() encrypted_bytes = unhexlify(src) decrypted = decryptor.update(encrypted_bytes) + decryptor.finalize() decrypted_padded = unpadder.update(decrypted) + unpadder.finalize() return decrypted_padded.decode('utf-8') except Exception as e: print(f"decode4hex fail: {e}") return None class CheckIdCard(View): def post(self, request): id_card = request.POST.get("id_card", "") if id_card == "": response_data = {"code": 2, "msg": "参数无效!"} return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") id_card = decode4hex(id_card, "loginqwert@12345") user_obj = UserProfile.objects.filter(id_card=id_card).first() if user_obj and id_card: if user_obj.is_active: if Token.objects.filter(user=user_obj).exists(): token_key = hexlify(os.urandom(20)).decode() Token.objects.filter(user=user_obj).update(key=token_key, created=datetime.now()) token_info = Token.objects.filter(user=user_obj).first() else: token_info = Token.objects.create(user=user_obj) UserProfile.objects.filter(username=user_obj.username).update(last_login=datetime.now()) if user_obj.sn.is_valid: response_data = {"code": 0, "msg": "", "token": token_info.key, "username": user_obj.username} else: response_data = {"code": 1, "msg": "当前账户已过期!请联系管理员!"} else: response_data = {"code": 1, "msg": "用户未激活!"} else: response_data = {"code": 1, "msg": "此用户不存在!"} return HttpResponse(content=json.dumps(response_data, indent=4, ), content_type="application/json;charset=UTF-8") 逐行解析
05-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值