1. 程式人生 > >C++/CLI中的預設屬性訪問

C++/CLI中的預設屬性訪問

目前版本的VC2005測試版中,default關鍵字不僅用於指定類級別的索引器,而且也用於訪問預設屬性。但是奇怪的是,預設屬性的原名不能訪問了,也就是說,如果要把下面的程式碼段從託管C++移植到VC2005附帶的C++/CLI,不僅需要更改指標的型別,而且要把屬性的名稱更改為default:

//[System::Reflection::DefaultMemberAttribute("Fields")] interface _Recordset

//託管C++語法
//extern _Recordset* results;
Fields* ResultFields=results->Fields;

//C++/CLI語法
//extern _Recordset^ results;
Fields^ ResultFields=results->default;

如果繼續使用原來名字來訪問屬性的話,會報告編譯錯誤:

Fields^ ResultFields=results->Fields;//C3293: 'Fields': use 'default' to access the default property (indexer)

這是一個Breaking Change。在語言規範中,預設索引屬性只使用一個名字“default”,而且只有這一個實現。更進一步,預設索引屬性只能用如下方式訪問:

  • obj[index]
  • obj->default[index]
  • obj->default::get(index)
  • obj->default::set(index, value)

參考

相關推薦

C++/CLI預設屬性訪問

目前版本的VC2005測試版中,default關鍵字不僅用於指定類級別的索引器,而且也用於訪問預設屬性。但是奇怪的是,預設屬性的原名不能訪問了,也就是說,如果要把下面的程式碼段從託管C++移植到VC2005附帶的C++/CLI,不僅需要更改指標的型別,而且要把屬性的名稱更改為

Unity 3D:訪問另一個C#類屬性或方法

在開發Unity 3D 遊戲的過程中,經常遇到在某個C#類中訪問另一個C#類中的方法或屬性;比如:在Eenmy.cs中訪問PlayAttack.cs指令碼中的TakeDamage(int damage

C++/cliswtich處理命令列接收到的關鍵字

QQ群友中有人提出這樣一個問題:   Swtich接受的是整形或列舉型別, 關鍵字多數是一個字元, 將string轉換成char就應該可以, 所以我試著寫了一下程式碼, 直接提取string的第一個字元, 沒想到居然可行。 如果關鍵字是多個字元, 通過巢狀swtich判斷第二個字元

QML與C++混合程式設計(二):QML獲得C++類屬性

QML獲得C++類中的屬性   QML可以輕鬆地用C++中定義的功能進行擴充套件。由於QML引擎和Qt元物件系統的緊密結合,QML可以獲取任意QObject派生類中的功能,這使得QML可以通過一些小的改動直接獲得C++中的資料和方法。   QML引擎可以通過

C語言的生命週期,作用域,預設值,記憶體區域,連結屬性

1、全域性變數:定義在函式外部的變數 生命週期:從程式執行開始建立,程式退出銷燬; 作用域:從定義該變數開始一直到檔案的結束; 預設值:0; 記憶體區域:全域性(靜態)變數區; 連結屬性:外部(可以在其他檔案中引用)。 注意:全域性變數只需在一個原始檔中定義,就可以作用

《隨筆四》——C#的 “屬性和索引器的 get 和 set 訪問器的訪問修飾符”

屬性和索引器中的 get 和 set 訪問器的訪問修飾符 ●  索引器和屬性自帶 get 和 set 訪問器,  在預設的情況下:  如果一個屬性有public 訪問級別, 那麼它的那個兩個訪問器

C#不加訪問許可權修飾符時的預設訪問許可權說明

1.宣告名稱空間、類,前面不加限制訪問修飾符時,預設訪問許可權為internal——訪問僅限於當前程式集。 2.宣告類成員(包括欄位(變數)、屬性和方法)預設為private)以及結構型別,前面不加限制訪問修飾符時,預設訪問許可權為private——訪問僅限於當前類。3.宣

C#如何使用訪問修飾符來修飾屬性

public string ID {get; private set;} 上面的屬性對例項公開get方法,而在類裡面可以使用set方法。 相應的internal, protected, internal  protected都可以用來修飾屬性。注意public不可以,因為預設

C#預設訪問修飾符

如果被問到C#中預設的訪問修飾符是什麼?你該怎麼回答,是不是感覺不太好說!我把資料整理如下, 僅供參考! 首先,必須明確的是C#中的訪問修飾符有5中: public 同一程式集中的任何其他程式碼或引用

Android NDK(JNI)學習總結一:Java程式碼申明native函式-Java呼叫C函式,並在C函式訪問java類和方法、屬性

本文不涉及android-ndk開發環境搭。 步驟一:新建一個APP,名稱為HelloJNI,然後定義一個類(將會在native程式碼中呼叫和訪問該類): package com.example.hellojni; public class JNITe

C#如何訪問Lua屬性(1)

參考   http://www.myexception.cn/c-sharp/1881698.html C#如何訪問Lua中的屬性 1) .C#如何訪問LUA中的屬性? 2) .C#如何訪問LUA中的函式? 3) .C#如何訪問LUA中的表? 第一個檔案

C#4個訪問修飾符(隨筆)

結構 public 成員訪問 集中 internal pub ted 限制 nal Public:公有的,是類型和類型成員的訪問修飾符。對其訪問沒有限制。 Internal:內部的,是類型和類型成員的訪問修飾符。同一個程序集中的所有類都可以訪問 Private:私

C語言的作用域,鏈接屬性和存儲類型

硬件 變量的存儲 bsp 文件的 tro 們的 沒有 聲明 一個 作用域 當變量在程序的某個部分被聲明的時候,他只有在程序的一定漁區才能被訪問,編譯器可以確認4種不同類型的作用域:文件作用域,函數作用域,代碼塊作用域和原型作用域 1.代碼塊作用域:位於一對花括號之間的所

c# 線程訪問控件的解決方法 可直接調用此方法

個人理解 調用 sys ext app tar 執行 csharp back 問題 由於在初學c#的時候 使用了 線程委托去執行函數,是為了不讓軟件窗體假死。所以使用下方代碼: Thread th = new Thread(Getform); //創建線程

C#屬性

自由 set 不能 缺少 驗證 賦值 限制 意義 無法 在C#中,我們可以非常自由的、毫無限制的訪問公有字段,但在一些場合中,我們可能希望限制只能給字段賦於某個範圍的值、或是要求字段只能讀或只能寫,或是在改變字段時能改變對象的其他一些狀態,這些單靠字段是無法做到的,於是就有

c#datareaderHasRows屬性和Read方法的區別

可用 記錄 開頭 als true spa read 返回 row datareader.HasRows 屬性獲取一個值,該值指示 SqlDataReader 是否包含一行或多行,如果是則返回true,否則返回false; datareader

C++一個類訪問另外一個類的成員變數或者成員函式

1.在一個類中定義另外一個類的成員為指標型別。並用this指標管理物件的記憶體,實現資料的傳遞。 #include <stdio.h> class A { public: A(); ~A(); void SetData(int year, int month, int day);

c++ 預設定義 函式過載 引用

##概要 本片部落格 的主要內容有, c++中函式預設定義、 函式過載的機制 、函式名在VS環境下編譯後的修改,引用 及其 注意事項。最後列了一個表 文章目錄 預設定義 預設引數 預設引數的分類

《隨筆七》——C#的 “ 屬性 、 靜態屬性

目錄 屬性 使用屬性 利用 set 和 get  訪問器 執行其它運算 只讀和只寫屬性 屬性和公共欄位 自動實現屬性 靜態屬性 屬性 ●   屬性是代表類的例項或類中的一個數據項的成員。屬性指的是一組兩個匹配的、稱為訪

C語言符號的儲存類、連結屬性和生命週期

C語言中符號的儲存類 程式碼段:程式執行的程式碼,其實就是函式,它的生命週期是永久的(永久的意思就是在程式被執行時誕生,在程式終止時消亡),不過一般程式碼的生命週期我們並不關注。有時候放在程式碼段的不只是程式碼,還有const型別的常量,還有字串常量(const型別的常量、字串常量有時候放在